P1525 关押罪犯

并查集加一些非常玄幻的操作,主要就是b数组的神奇运用

 1 #include<set>
 2 #include<map>
 3 #include<list>
 4 #include<queue>
 5 #include<stack>
 6 #include<string>
 7 #include<cmath>
 8 #include<ctime>
 9 #include<vector>
10 #include<bitset>
11 #include<memory>
12 #include<utility>
13 #include<cstdio>
14 #include<sstream>
15 #include<iostream>
16 #include<cstdlib>
17 #include<cstring>
18 #include<algorithm>
19 using namespace std;
20 
21 int n,m;
22 int a[200005],b[200005];
23 struct node{
24     int id1,id2,val;
25 }zy[200005];
26 
27 bool cmp(node a,node b){
28     return a.val>b.val;
29 }
30 
31 int find(int z){
32     if(z==a[z]){
33         return z;
34     }
35     return a[z]=find(a[z]);
36 }
37 
38 int main(){
39     scanf("%d%d",&n,&m);
40     for(int i=1;i<=n;i++){
41         a[i]=i;
42     }
43     for(int i=1;i<=m;i++){
44         scanf("%d%d%d",&zy[i].id1,&zy[i].id2,&zy[i].val);
45     }
46     sort(zy+1,zy+1+m,cmp);
47     for(int i=1;i<=m;i++){
48         if(find(a[zy[i].id1])==find(a[zy[i].id2])){
49             printf("%d\n",zy[i].val);
50             return 0;
51         }
52         if(!b[zy[i].id1]){
53             b[zy[i].id1]=zy[i].id2;
54         }
55         else{
56             a[find(zy[i].id2)]=find(b[zy[i].id1]);
57         }
58         if(!b[zy[i].id2]){
59             b[zy[i].id2]=zy[i].id1;
60         }
61         else{
62             a[find(zy[i].id1)]=find(b[zy[i].id2]);
63         }
64     }
65     printf("0\n");
66     return 0;
67 }

 

posted @ 2019-10-10 21:43  喵呜,颜儿ღ  阅读(111)  评论(0编辑  收藏  举报