A. Wormhole Sort
Posted studyshare777
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了A. Wormhole Sort相关的知识,希望对你有一定的参考价值。
https://codeforces.com/group/5yyKg9gx7m/contest/270203/problem/A
分析:
代码:
#include <cstdio> #include <algorithm> #include <iostream> using namespace std; typedef long long ll; const int maxn=1e5+6; struct cop { int u,v; int w; }c[maxn]; int p[maxn]; int a[maxn]; int fa[maxn]; int n,m; int dis; int find(int x) { return x==fa[x]?x:fa[x]=find(fa[x]); } void Union(int x,int y) { x=find(x),y=find(y); fa[x]=y; } bool same(int x,int y) { return find(x)==find(y); } bool judge(int x) { for(int i=1;i<=n;i++) fa[i]=i;//初始化 for(int i=x;i<=m;i++) { Union(c[i].u,c[i].v); } for(int i=1;i<=dis;i++) { if(!same(a[p[i]],p[i])) return 0; } return 1; } bool cmp(struct cop a,struct cop b) { return a.w<b.w; } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); if(a[i]!=i) p[++dis]=i; } for(int i=1;i<=m;i++) { scanf("%d %d %d",&c[i].u,&c[i].v,&c[i].w); } if(!dis) { printf("-1 "); return 0; } sort(c+1,c+m+1,cmp); int l=1,r=m; int mid=(l+r)>>1; while(l<=r) { mid=(l+r)>>1; if(judge(mid)) l=mid+1; else r=mid-1; } cout<<c[l-1].w<<endl; return 0; }
以上是关于A. Wormhole Sort的主要内容,如果未能解决你的问题,请参考以下文章
[原创]java WEB学习笔记61:Struts2学习之路--通用标签 property,uri,param,set,push,if-else,itertor,sort,date,a标签等(代码片段