标签:names name scan ios lag ems 一个 nod scanf
基础并查集--
#include<iostream> #include<string.h> #include<algorithm> #include<stdio.h> using namespace std; const int maxx = 200005; int n,m; int pre[maxx]; int f[maxx]; void init() { for (int i=0; i<=maxx; i++) { pre[i]=i; } } int findd(int x) { int r=x; while(pre[r]!=r) r=pre[r];//找到他的前导结点 int i=x,j; while(i!=r)//路径压缩算法 { j=pre[i];//记录x的前导结点 pre[i]=r;//将i的前导结点设置为r根节点 i=j; } return r; } void join(int x,int y) { int fx=findd(x); int fy=findd(y); if (fx!=fy) pre[fx]=fy; } struct node { int u,v,w; } a[maxx]; bool cmp(node aa,node bb) { return aa.w>bb.w; } int main() { while(~scanf("%d%d",&n,&m)) { init(); memset(f,0,sizeof(f)); int flag=0; for (int i=1; i<=m; i++) { scanf("%d%d%d",&a[i].u,&a[i].v,&a[i].w); } sort(a+1,a+1+m,cmp); for (int i=1; i<=m; i++) { int fax=findd(a[i].u);// int fay=findd(a[i].v); if (fax==fay)//首先判断是不是一个集合,如果是就立马输出 { flag=a[i].w; break; } if (!f[a[i].u])//如果这个点没有敌人 { f[a[i].u]=a[i].v;//加一个敌人 } else { join(f[a[i].u],a[i].v);//如果这个点有敌人把敌人变为自己人 } if (!f[a[i].v]) { f[a[i].v]=a[i].u; } else { join(f[a[i].v],a[i].u); } } printf("%d\n",flag); } return 0; }
标签:names name scan ios lag ems 一个 nod scanf
原文地址:https://www.cnblogs.com/bluefly-hrbust/p/9684209.html