2010提高组-C]关押罪犯(扩展域并查集
发布时间:2020-12-16 09:16:23 所属栏目:百科 来源:网络整理
导读:题:https://www.cometoj.com/problem/0073 ? #includebits/stdc++.h using namespace std; const int M=1e5+ 4 ; struct node{ int u,v,w;}e[M]; int f[M]; bool cmp(node p,node q){ return p.w q.w;} int find( int x){ return f[x]==x?x:f[x]= find(f[x]
题:https://www.cometoj.com/problem/0073 ? #include<bits/stdc++.h> using namespace std; const int M=1e5+4; struct node{ int u,v,w; }e[M]; int f[M]; bool cmp(node p,node q){ return p.w>q.w; } int find(int x){ return f[x]==x?x:f[x]=find(f[x]); } int main(){ int n,m; scanf("%d%d",&n,&m); for(int i=1;i<=m;i++){ scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w); } sort(e+1,e+1+m,cmp); for(int i=1;i<=2*n;i++) f[i]=i; for(int i=1;i<=m;i++){ int u=e[i].u,v=e[i].v; int uu=e[i].u+n,vv=e[i].v+n; int a=find(u),b=find(v); int aa=find(uu),bb=find(vv); if(a==b){ return printf("%dn",e[i].w),0; } else { if(a!=bb) f[a]=bb; if(aa!=b) f[aa]=b; } } printf("0n"); return 0; } ? 把每个人拆成两个点分别表示与这个人一个监狱的集合和与这个人不同监狱的集合即可。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- c# – 如何在linq join(lambda)上添加where子句?
- actionscript-3 – konami代码
- ruby-on-rails-3 – 在Rails 3应用程序中解析JSON HTTP帖子
- postgresql – 如何获取用户所属的所有角色(包括继承的角色
- 正则表达式模式匹配的String方法
- ??????ARM外设flash及SDRAM的地址连接
- 使用flex的一点说明
- Flutter multidex问题使用FirebaseAuth,Firestore和Google登
- 自定义控件的自定义的属性attrs.xml下的declare-styleable中
- 在vue-cli搭建的项目中增加后台mock接口的方法