zoukankan      html  css  js  c++  java
  • zoj 1406 jungle roads

    题意就是要求最小生成树,用的kruskal

    #include <stdio.h>
    #include <algorithm>
    int p[30],n,x1;
    
    struct edge
    {
    	int u,v,w;
    }ed[100];
    
    int get(int x)
    {
    	if(p[x]==x)
    		return x;
    	else
    		return p[x]=get(p[x]);
    }
    
    void uni(int x,int y)
    {
    	int p1,p2;
    	p1=get(x);
    	p2=get(y);
    	if(p1!=p2)
    		p[p1]=p2;
    }
    
    int cmp(const void *a,const void *b)
    {
    	edge aa=*(const edge *)a;
    	edge bb=*(const edge *)b;
    	return aa.w-bb.w;
    }
    
    int kruskal()
    {
    	int cost=0;
    	int x,y,i;
    	for(i=0;i<x1;i++)
    	{
    		x=ed[i].u;
    		y=ed[i].v;
    		if(get(x)!=get(y))
    		{
    			cost+=ed[i].w;
    			uni(x,y);
    		}
    	}
    	return cost;
    }
    
    int main()
    {
    	int i,j,k;
    	int w1;
    	char u1,v1;
    	while(1)
    	{
    		scanf("%d",&n);
    		if(n==0)
    			break;
    		x1=0;
    		getchar();
    		for(i=0;i<n;i++)
    			p[i]=i;
    		for(i=1;i<=n-1;i++)
    		{
    			scanf("%c%d",&u1,&k);
    			getchar();
    			for(j=0;j<k;j++)
    			{
    				scanf("%c%d",&v1,&w1);
    				ed[x1].u=u1-'A';
    				ed[x1].v=v1-'A';
    				ed[x1].w=w1;
    				x1++;
    				getchar();
    			}
    		}
    		qsort(ed,x1,sizeof(ed[0]),cmp);
    		printf("%d
    ",kruskal());
    	}
    	return 0;
    }


     

  • 相关阅读:
    菜根谭#245
    菜根谭#244
    菜根谭#243
    菜根谭#242
    菜根谭#241
    菜根谭#240
    菜根谭#239
    菜根谭#238
    菜根谭#237
    [转载]Linux 内核list_head 学习(一)
  • 原文地址:https://www.cnblogs.com/vermouth/p/3710233.html
Copyright © 2011-2022 走看看