1 条题解

  • 0
    @ 2025-4-7 21:19:28

    C :

    #include<stdio.h>
    #include<ctype.h>
    #include<string.h>
    #include<stdlib.h>
    
    int c[27];
    typedef struct
    {
      int s,e,cost;
    }ROAD;
    
    int cmp(const void* pa,const void* pb)
    {
       return (*(ROAD*)pa).cost>(*(ROAD*)pb).cost;
    }
    
    int find(int n)
    {
       int tmp;
       if(c[n]==-1) return n;
       else 
       {
          tmp=find(c[n]);
    	  c[n]=tmp;
    	  return tmp;
       }
    }
    
    int main()
    {
        int i,j,k,n,m,s,sum,a,b;
        char str[2],str1[2];
    	ROAD r[76];
    	while(scanf("%d",&n)!=EOF&&n!=0)
    	{
    		memset(c,-1,sizeof(int)*27);
    		for(m=0,i=0;i<n-1;i++)
    		{
    		  scanf("%s%d",str,&k);
    		  for(j=0;j<k;j++)
    		  {
    		    r[m].s=str[0]-'A';
                scanf("%s%d",str1,&r[m].cost);
    			r[m].e=str1[0]-'A';
    			m++;
    		  }
    		}
            qsort(r,m,sizeof(ROAD),cmp);
    		for(i=0,sum=k=0;i<m&&k!=n-1;i++)
    		{
    		  a=find(r[i].s);
    		  b=find(r[i].e);
    		  if(a!=b)
    		  {
    		    c[a]=b;
    			k++;
    			sum+=r[i].cost;
    		  }
    		
    		}
    		printf("%d\n",sum);  
    	}
    	return 0;
    }
    

    C++ :

     #include <iostream>
     #include <stdio.h>
     #include <algorithm>
     #include <string.h>
     using namespace std;
     
     struct node{
         int x,y,len;
     }road[5050];
     int pre[30];
     
     int find(int x)
     {
         if(pre[x]!=x)
             pre[x]=find(pre[x]);
         return pre[x];
     }
     
     int Union(int a,int b)
     {
         int x,y;
         x=find(a);
         y=find(b);
         if(x==y) return 1;
         else 
         {
             pre[y]=x;
             return 0;
         }
     }
     
     bool cmp(node a,node b)
     {
         return a.len<b.len;
     }
     
     int main()
     {    
         int n,m,i,j,p,q;
         char a,b;
         while(scanf("%d",&n)==1)
         {
             if(n==0) break;
             int k=0;
             for(i=1;i<n;i++)
             {
                 cin>>a>>m;
                 for(j=1;j<=m;j++)
                 {
                     road[k].x=a-'A'+1;
                     cin>>b>>q;
                     road[k].y=b-'A'+1;
                     road[k].len=q;
                     k++;
                 }
                 pre[i]=i;
             }
             pre[i]=i;
             sort(road,road+k,cmp);
             int ans=0;
             for(i=0;i<k;i++)
             {
                 if(Union(road[i].x,road[i].y)==0)
                     ans+=road[i].len;
             }
             printf("%d\n",ans);
         }
         return 0;
     }
     
    
    • 1

    信息

    ID
    1145
    时间
    1000ms
    内存
    32MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者