1 条题解

  • 0
    @ 2025-11-30 16:28:08

    C++ :

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    struct jiegouti
    {
    	int a,b,k;
    	float v;
    }T[6000];
    int r[6000];
    int f[6000];
    int paixu(jiegouti a,jiegouti b)
    {
    	if(a.v < b.v ) return 1;
    	if(a.v > b.v ) return 0;
    	if(a.v == b.v ) 
    	{
    		if( a.k<b.k ) return 1;
    		return 0;
    	}
    }
    int find(int x)
    {
    	if(x==f[x]) return x;
    	f[x]=find(f[x]);
    	return f[x];
    }
    void bing  (int x,int y)
    {
    	x=find(x);
    	y=find(y);
    	if(x!=y)
    	f[y]=x;
    }
    int main()
    {
    	
    //	freopen("road.in","w",stdin);
    //	freopen("road.out","w",stdout);
    	
    	int n,m;
    	scanf("%d%d",&n,&m);
    	
    	for(int i=1;i<=n;i++) f[i]=i;
    	
    	for(int i=1;i<=m;i++)
    	{
    		for(int w=1;w<=n;w++) f[w]=w;
    		scanf("%d%d%f",&T[i].a,&T[i].b,&T[i].v);
    	
    		T[i].k=i;
    		
    		sort(T+1,T+i+1,paixu);
    		
    		
    		int c=0,l=1;
    		float sum=0;
    		bool z=0;
    		
    		for(int j=1;j<=i;j++)
    		{
    			if(find(T[j].a) != find(T[j].b))
    			{
    				bing(T[j].a,T[j].b);
    				c++;
    				sum+=T[j].v;
    			
    				r[l]=T[j].k;
    			
    				l++;
    			}
    			if(c==n-1)
    			{
    				sum/=2;
    				printf("%.2f",sum);
    				printf(" ");
    				
    				
    				sort(r+1,r+c+1);
    				
    				for(int l=1;l<=c;l++)
    				{
    					printf("%d",r[l]);
    					printf(" ");
    				}
    				
    				printf("\n");
    				
    				z=1;
    				break;
    			}
    		}
    		if(z==0)
    		{
    			printf("0");
    			printf("\n");
    		}
    	}
    
    }
    
    • 1

    信息

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