YEZAELP

CUBE-165: National Ant Colony

Jun 13th, 2020
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.48 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int INF=2e9;
  4. using pii = pair<int,int> ;
  5. int num[50005];
  6. map <int,int> cnt,mp,amount;
  7. vector <pii> g[50005];
  8. bool visited[50005];
  9. void bfs(int u,int d){
  10.     if(visited[u])
  11.         return ;
  12.     visited[u]=true;
  13.     cnt[num[u]]++;
  14.     for(auto v:g[u]){
  15.         if( v.second>d ) bfs(v.first,d);
  16.  
  17.     }
  18. }
  19. int main(){
  20.  
  21.     int n,m,k;
  22.     scanf("%d%d%d",&n,&m,&k);
  23.     for(int i=1;i<=n;i++) {
  24.         scanf("%d",&num[i]);
  25.         mp[num[i]]++;
  26.     }
  27.  
  28.     int l=1,r=INF,mid,ans=0;
  29.     for(int i=1;i<=m;i++){
  30.         int u,v,d;
  31.         scanf("%d%d%d",&u,&v,&d);
  32.         amount[d]++;
  33.         g[u].push_back({v,d});
  34.         g[v].push_back({u,d});
  35.     }
  36.     while(l<=r){
  37.         mid=(l+r)/2;
  38.         bool check=true;
  39.         for(int i=1;i<=n;i++){
  40.             visited[i]=false;
  41.         }
  42.         for(int i=1;i<=n;i++){
  43.             if(!visited[i]){
  44.                 bfs(i,mid);
  45.                 for(auto j:cnt){
  46.                     if(mp[j.first]!=cnt[j.first]){
  47.                         check=false;
  48.                         break;
  49.                     }
  50.                 }
  51.                 cnt.clear();
  52.             }
  53.             if(!check) break;
  54.         }
  55.         if(check) {
  56.             ans=max(ans,mid);
  57.             l=mid+1;
  58.         }
  59.         else {
  60.             r=mid-1;
  61.         }
  62.     }
  63.      int c=0;
  64.     for(auto i:amount){
  65.         if(i.first<=ans) c+=i.second;
  66.     }
  67.     printf("%d",c);
  68.  
  69.     return 0;
  70. }
Add Comment
Please, Sign In to add comment