![P1525 [NOIP2010 提高组] 关押罪犯 (并查集 扩展域,第1张 P1525 [NOIP2010 提高组] 关押罪犯 (并查集 扩展域,第1张](/aiimages/P1525+%5BNOIP2010+%E6%8F%90%E9%AB%98%E7%BB%84%5D+%E5%85%B3%E6%8A%BC%E7%BD%AA%E7%8A%AF+%EF%BC%88%E5%B9%B6%E6%9F%A5%E9%9B%86+%E6%89%A9%E5%B1%95%E5%9F%9F.png)
添加链接描述
#includeusing namespace std; const int N=4e4+9,M=1e5+9; int fa[N]; struct node { int a,b,c; }t[M]; bool cmp(node a,node b){ return a.c>b.c; } int find(int x){ if(x==fa[x])return fa[x]; return fa[x]=find(fa[x]); } void merge(int a,int b){ fa[find(a)]=find(b); } int main(){ int n,m; scanf("%d%d",&n,&m); for(int i=1;i<=4e4+5;i++){ fa[i]=i; } for(int i=1;i<=m;i++){ int a,b,c; scanf("%d%d%d",&a,&b,&c); t[i]={a,b,c}; } sort(t+1,t+1+m,cmp); for(int i=1;i<=m;i++){ int a=t[i].a,b=t[i].b,c=t[i].c; if(find(a)==find(b)||find(a+n)==find(b+n)){ printf("%d",c); return 0; } else merge(a+n,b),merge(a,b+n); } printf("0"); return 0; }
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)