제출 #568757

#제출 시각아이디문제언어결과실행 시간메모리
568757almothana05다리 (APIO19_bridges)C++14
0 / 100
3061 ms18384 KiB
#include<bits/stdc++.h>
#define mod 1000000007
#define inf 10000000000000000
using namespace std;
vector<vector<int> >edge , q ,mst;
vector<pair<int , int> >gr[100000];
int erg , vis[100000] , erge[100010] ;
pair<int , int> f[100000];
void dfs(int x , int cmp){
   // cout << x << ' ' << erg << "\n";
   vis[x] = 1;
   erg++;
   for(int i = 0 ; i < gr[x].size() ; i++){
      int kind = gr[x][i].first , val = gr[x][i].second;
      // cout << x << ' ' << kind << ' ' << val << "\n";
      if(vis[kind] == 0 && val >= cmp){
         dfs(kind , cmp);
      }
   }
}
int fater(int x){
   if(f[x].first == x){
      return x;
   }
   f[x].first = fater(f[x].first);
   return f[x].first;
}
void merge(int z , int x , int y){
   // if(z == 1){
   //    cout << "ja\n";
   // }
   while(q.size() > 0 && z < q[q.size() - 1][0]){
   // cout << z <<' ' << q[q.size() - 1][0] << "\n" << q.size() << "\n";
      // cout << q[q.size() - 1][1] << ' ' << f[fater(q[q.size() - 1][1])].first << "\n";
      erge[q[q.size() - 1][2]] = f[fater(q[q.size() - 1][1])].second;
      q.pop_back();
   }
   if(fater(x) != fater(y)){
      // cout << x << ' ' << y << "\n\n";
      f[fater(x)].second += f[fater(y)].second;
      f[fater(y)].first = fater(x);
   }
}
int main(){
   
   // ios_base::sync_with_stdio(false);
   // cin.tie(NULL);
   int menge , numm , nummer , ed , cmp , comp ;;
   cin >> menge >> ed;
   for(int i = 0 ; i <= menge ; i++){
      f[i] = {i , 1};
   }
   for(int i = 0 ; i < ed ; i++){
      cin >> numm >> nummer >> cmp;
      gr[numm].push_back({nummer , cmp});
      gr[nummer].push_back({numm , cmp});
      edge.push_back({numm , gr[numm].size() - 1 , nummer , gr[nummer].size() - 1});
      mst.push_back({cmp , numm , nummer});
   }
   int que;
   cin >> que;
   if(que < 10000 && menge < 1000){
      sort(mst.begin() , mst.end());
      for(int i = 0 ; i < que ; i++){
         cin >> numm >> numm >> nummer;
         q.push_back({nummer , numm , i});
      }
      sort(q.begin() , q.end());
      for(int i = ed - 1 ; i >= 0 ; i--){
         // numm = mst[i][];
         merge(mst[i][0] , mst[i][1] , mst[i][2]);
      }
      while(q.size() > 0 ){
         // cout << q[q.size() - 1][1] << ' ' << f[fater(q[q.size() - 1][1])].first << "\n";
         erge[q[q.size() - 1][2]] = f[fater(q[q.size() - 1][1])].second;
         q.pop_back();
      }
      for(int i = 0 ; i < que ; i++){
         cout << erge[i] << "\n";;
      }
      return 0;
   }
   ////////////////////////////////////////////////////////////////////////////////////////
   while(que--){
      // cout << "ja\n";
      cin >> numm;
      if(numm == 1){
         cin >> numm >> nummer;
         numm--;
         gr[edge[numm][0]][edge[numm][1]].second = nummer;
         gr[edge[numm][0]][edge[numm][1]].second = nummer;
      }
      else{
         cin >> numm >> nummer;
         erg = 0;
         dfs(numm , nummer);
         cout << erg << "\n";
         for(int i = 0 ; i <= menge ; i++){
            vis[i] = 0;
         }
      }
   }
}

컴파일 시 표준 에러 (stderr) 메시지

bridges.cpp: In function 'void dfs(int, int)':
bridges.cpp:13:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   13 |    for(int i = 0 ; i < gr[x].size() ; i++){
      |                    ~~^~~~~~~~~~~~~~
bridges.cpp: In function 'int main()':
bridges.cpp:57:46: warning: narrowing conversion of '(gr[numm].std::vector<std::pair<int, int> >::size() - 1)' from 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} to 'int' [-Wnarrowing]
   57 |       edge.push_back({numm , gr[numm].size() - 1 , nummer , gr[nummer].size() - 1});
      |                              ~~~~~~~~~~~~~~~~^~~
bridges.cpp:57:46: warning: narrowing conversion of '(gr[numm].std::vector<std::pair<int, int> >::size() - 1)' from 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} to 'int' [-Wnarrowing]
bridges.cpp:57:79: warning: narrowing conversion of '(gr[nummer].std::vector<std::pair<int, int> >::size() - 1)' from 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} to 'int' [-Wnarrowing]
   57 |       edge.push_back({numm , gr[numm].size() - 1 , nummer , gr[nummer].size() - 1});
      |                                                             ~~~~~~~~~~~~~~~~~~^~~
bridges.cpp:57:79: warning: narrowing conversion of '(gr[nummer].std::vector<std::pair<int, int> >::size() - 1)' from 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} to 'int' [-Wnarrowing]
bridges.cpp:48:43: warning: unused variable 'comp' [-Wunused-variable]
   48 |    int menge , numm , nummer , ed , cmp , comp ;;
      |                                           ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...