并查集优化下-3

来源:互联网 发布:网络医疗 编辑:程序博客网 时间:2024/06/05 18:52
#include<bits/stdc++.h>using namespace std;const int N=10000,M=100000;int f[N+100];int siz[N+100];struct nodes{    int u,v,w;}node[M+100];bool cmp(nodes p,nodes q){    return p.w>q.w;}void init(int n){    for(int i=1;i<=n;i++) f[i]=i;    for(int i=1;i<=n;i++) siz[i]=1;}int Find(int x){    if(x==f[x]) return x;    return Find(f[x]);}int Union(int x,int y){    int tx,ty;    tx=Find(x);    ty=Find(y);    if(tx==ty) return 0;    if(siz[tx]<siz[ty]) {f[tx]=ty;siz[ty]+=tx;}    else {f[ty]=tx;siz[tx]+=ty;}    return 1;}int main(){    int n,m;    scanf("%d%d",&n,&m);    for(int i=0;i<m;i++) scanf("%d%d%d",&node[i].u,&node[i].v,&node[i].w);    sort(node,node+m,cmp);    init(n);    int ans=0,pre=-1;    for(int i=0;i<m;i++)    {        int way=Union(node[i].u,node[i].v);        if(way&&node[i].w!=pre)        {            ans++;            pre=node[i].w;        }    }    printf("%d\n",ans);    return 0;}

国王的烦恼
0 0