hdu1102 最小生成树

来源:互联网 发布:织梦数据库查询语句 编辑:程序博客网 时间:2024/06/05 15:26
#include<cstdio>#include<cmath>#include<cstring>#include<iostream>#include<algorithm>#include<queue>#include<string>using namespace std;#define INF 0x3f3f3f3ftypedef __int64 ll;struct node{    ll w;    int u,v;} edge[105*105/2];int f[105];bool cmp(node a,node b){    return a.w<b.w;}int _find(int x){    if(x!=f[x])        f[x]=_find(f[x]);    return f[x];}int main(){    int n;    while(~scanf("%d",&n))    {        int cnt=0;        for(int i=1; i<=n; i++)        {            f[i]=i;            for(int j=1; j<=n; j++)            {                ll a;                scanf("%I64d",&a);                if(i>j)                {                    edge[cnt].w=a;                    edge[cnt].u=i;                    edge[cnt].v=j;                    cnt++;                }            }        }        sort(edge,edge+cnt,cmp);        int t;        int q;        scanf("%d",&q);        while(q--)        {            int a,b;            scanf("%d%d",&a,&b);            int fa=_find(a),fb=_find(b);            if(fa!=fb)                fa>fb?f[fa]=fb:f[fb]=fa;        }        ll ans=0;        for(int i=0; i<cnt; i++)        {            int fa=_find(edge[i].u),fb=_find(edge[i].v);            if(fa!=fb)            {                fa>fb?f[fa]=fb:f[fb]=fa;                ans+=edge[i].w;            }           }        printf("%I64d\n",ans);    }}
0 0
原创粉丝点击