4 条题解

  • 1
    @ 2022-10-23 15:31:00

    kruskal

    /*****************************************
    Note:
    ******************************************/
    #include <queue>
    #include <set>
    #include <math.h>
    #include <stack>
    #include <stdio.h>
    #include <iostream>
    #include <vector>
    #include <iomanip>
    #include <string.h>
    #include <algorithm>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    #define LL long long
    const int N = 1e6 + 10;
    const int INF = 0x3f3f3f3f;
    int n,m,fa[N];
    struct node{
    	int a,b,dis;
    }p[N];
    void init()
    {
    	for(int i=1;i<=n;i++)
    		fa[i]=i;
    }
    int find(int x)
    {
    	return (fa[x]==x)?x:fa[x]=find(fa[x]);
    }
    bool cmp(node a,node b)
    {
    	return a.dis<b.dis;
    }
    void kruskal()
    {
    	int sum=0,cnt=0;
    	for(int i=1;i<=m;i++)
    	{
    		if(cnt==n-1) break;
    		int x=find(p[i].a),y=find(p[i].b);
    		if(x!=y)
    		{
    			cnt++;
    			sum+=p[i].dis;
    			fa[x]=y;
    		}
    	}
    	cout<<sum<<endl;
    }
    int main()
    {
    	while(cin>>n&&n)
    	{
    		init();
    		memset(p,0,sizeof p);
    		for(int i=1;i<n;i++)
    		{
    			char q,tmp;
    			int k;
    			cin>>q>>k;
    			for(int j=1;j<=k;j++){
    				cin>>tmp;
    				p[++m].a = q-'A' + 1;
    				p[m].b = tmp-'A' + 1;
    				cin>>p[m].dis;
    				m++;
    			}
    			if(k) m--;
    		}
    		sort(p+1,p+m+1,cmp);
    		kruskal();
    	}
    	return 0;
    }
    

    信息

    ID
    1326
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    41
    已通过
    25
    上传者