首页 > 其他 > 详细

[USACO20JAN] Wormhole Sort S

时间:2021-05-03 22:39:39      阅读:38      评论:0      收藏:0      [点我收藏+]

 

 

 

 1 #include<bits/stdc++.h>
 2  
 3 using namespace std;
 4 int f[100001];
 5 int a[100001];
 6 
 7 struct node
 8 {
 9     int x,y,z;
10 }b[100001];
11 
12 int find(int k)
13 {
14     if(f[k]==k)
15         return k; 
16     else
17      return f[k]=find(f[k]);    
18 }
19 int n,m;
20 int _flag; 
21 int tot;
22 int flag[100001];
23 bool pd(int x)
24 {    
25     for(int i=1;i<=n;i++)
26         f[i]=i;
27     for(int i=1;i<=m;i++)
28     {
29         if(b[i].z < x) continue;
30         int p=find(b[i].x),q=find(b[i].y);
31         f[p]=q;
32     }
33     for(int i=1;i<=tot;i++)
34         if(find(a[flag[i]])!=find(flag[i]))
35             return 0;
36             
37     return 1;
38 }
39 
40 
41 bool cmp(node x,node y)
42 {
43     return x.z>y.z;
44 }
45 
46 int main()
47 {
48     ios::sync_with_stdio(false);
49     cin>>n>>m;
50 int l=-1,r=0x3f3f3f3f;    
51     for(int i=1;i<=n;i++)
52     {
53         cin>>a[i];
54         if(a[i]!=i)
55         {
56         tot++;
57         _flag=1;
58         flag[tot]=i;
59         }    
60     }
61     for(int i=1;i<=m;i++)
62     {
63         cin>>b[i].x>>b[i].y>>b[i].z;
64     }
65 //    sort(b+1,b+1+n,cmp);
66     int ans;
67     if(!_flag)
68     {
69         cout<<"-1";
70         return 0;
71     }
72     while(l<=r)
73     {
74     
75         int mid=(l+r)>>1;
76         if(pd(mid))
77         {l=mid+1;
78         ans=mid;
79         
80         }
81         else
82         r=mid-1;
83     }
84     cout<<ans;
85     return 0;
86 } 

 

[USACO20JAN] Wormhole Sort S

原文:https://www.cnblogs.com/Hehe-0/p/14727862.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!