模板——最小生成树

来源:互联网 发布:对比度算法 编辑:程序博客网 时间:2024/05/22 09:05

题出自洛谷p3366最小生成树

#include<cstdio>#include<iostream>#include<algorithm>using namespace std;inline int read(){    int p,data=0;    char ch=0;    while((ch!='-')&&ch<'0'||ch>'9') ch=getchar();    if(ch=='-')    {        p=-1;        ch=getchar();    }    else p=1;    while(ch<='9'&&ch>='0')    {        data=data*10+ch-'0';        ch=getchar();    }    return data*p; }  int n,m; struct gty {    int a,b,c; }gtyy[210000]; int cmp(gty x,gty y) {    return x.c<y.c; } int pre[5100]; int k=0; int tot=0; int find(int z) {    if(pre[z]==z) return z;    pre[z]=find(pre[z]);    return pre[z]; } int main() {    n=read();    m=read();    for(int i=1;i<=m;i++)    {        gtyy[i].a=read();        gtyy[i].b=read();        gtyy[i].c=read(); //     pre[i]=i;    }    for(int i=1;i<=n;i++)    {        pre[i]=i;    }    sort(gtyy+1,gtyy+m+1,cmp);    for(int i=1;i<=m;i++)    {        if(k==n-1)        {            printf("%d",tot);            return 0;        }        else        {            if(find(gtyy[i].a)!=find(gtyy[i].b))            {                pre[find(gtyy[i].a)]=find(gtyy[i].b);                tot+=gtyy[i].c;                k++;            }        }    }    printf("orz");    return 0; }
原创粉丝点击