SuitNdtie

Copying is not permitted

Apr 15th, 2019
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.36 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<vector>
  3. using namespace std;
  4. int n,m,p;
  5. typedef long long int ll;
  6. typedef struct{
  7.     int v;
  8.     ll w;
  9. }edge;
  10. vector<edge> adj[40010];
  11. int component[40010];
  12. bool visited[40010];
  13. pair<int,int> restricted[50010];
  14.  
  15. void dfs(int u,int c,ll cW){
  16.     if(visited[u])return;
  17.     component[u] = c;
  18.     visited[u] = true;
  19.     for(int i=0;i<adj[u].size();i++){
  20.         int v = adj[u][i].v;
  21.         ll w = adj[u][i].w;
  22.         if(w < cW && !visited[v]){
  23.             dfs(v,c,cW);
  24.         }
  25.     }
  26. }
  27.  
  28. bool check(ll cW){ //return true if can't copying
  29.     for(int i=1;i<=n;i++){
  30.         component[i] = i;
  31.         visited[i] = false;
  32.     }
  33.     for(int i=1;i<=n;i++){
  34.         if(!visited[i]){
  35.             dfs(i,i,cW);
  36.         }
  37.     }
  38.     for(int i=0;i<p;i++){
  39.         if(component[restricted[i].first] == component[restricted[i].second]){
  40.             return false;
  41.         }
  42.     }
  43.     return true;
  44. }
  45.  
  46. int main(){
  47.     scanf("%d %d %d",&n,&m,&p);
  48.     ll maxW = -2e9;
  49.     for(int i=0;i<m;i++){
  50.         int u,v;
  51.         ll w;
  52.         scanf("%d %d %lld",&u,&v,&w);
  53.         if(w > maxW)maxW = w;
  54.         adj[u].push_back({v,w});
  55.         adj[v].push_back({u,w});
  56.     }
  57.     for(int i=0;i<p;i++){
  58.         scanf("%d %d",&restricted[i].first,&restricted[i].second);
  59.     }
  60.     if(check(maxW+1)){
  61.         printf("-1");
  62.         return 0;
  63.     }
  64.     ll l = 0 , r = maxW;
  65.     ll ans = -2e9;
  66.     while(l <= r){
  67.         ll m = (l+r)/2;
  68.         if(check(m)){
  69.             if(m > ans)ans = m;
  70.             l = m + 1;
  71.         }else{
  72.             r = m - 1;
  73.         }
  74.     }
  75.     printf("%lld",ans);
  76.     return 0;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment