zoukankan      html  css  js  c++  java
  • HDU 2122 Ice_cream’s world III【最小生成树】

    解题思路:基础的最小生成树
    反思:不明白为什么i从1开始取,就一直WA,难道是因为村庄的编号是从0开始的吗

    Ice_cream’s world III

    Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1032    Accepted Submission(s): 335

    Problem Description
    ice_cream’s world becomes stronger and stronger; every road is built as undirected. The queen enjoys traveling around her world; the queen’s requirement is like II problem, beautifies the roads, by which there are some ways from every city to the capital. The project’s cost should be as less as better.
     
    Input
    Every case have two integers N and M (N<=1000, M<=10000) meaning N cities and M roads, the cities numbered 0…N-1, following N lines, each line contain three integers S, T and C, meaning S connected with T have a road will cost C.
     
    Output
    If Wiskey can’t satisfy the queen’s requirement, you must be output “impossible”, otherwise, print the minimum cost in this project. After every case print one blank.
     
    Sample Input
    2 1 0 1 10 4 0
     
    Sample Output
    10 impossible
     
    Author
    Wiskey
    #include<iostream>  
    #include<cstdio>  
    #include<cstring>  
    #include<algorithm>  
    using namespace std;
    int pre[10010];
    struct Edge
    {
    
        int u,v,w;
    } edge[10010];
    bool cmp(Edge n1,Edge n2)
    {
       return n1.w<n2.w;
    }
    int find(int root)
    { 
       return root == pre[root] ? root : pre[root] = find(pre[root]); 
    }
    int unionroot(int x,int y)
    {
    	int root1=find(x);
    	int root2=find(y);
    	if(root1==root2)
    	return 0;
    	pre[root1]=root2;
    	return 1;
    }
    int main()
    {
        int n,m,i,j,tmp,x,y,ans;
        while(scanf("%d %d",&n,&m)!=EOF)
        {
        	tmp=0;
        	ans=0;
            for(i=0;i<=10010;i++)
            pre[i]=i;
            for(i=0;i<m;i++)
            scanf("%d %d %d",&edge[i].u,&edge[i].v,&edge[i].w);
            
            sort(edge,edge+m,cmp);
            for(i=0;i<m;i++)
            {
            	x=find(edge[i].u);
            	y=find(edge[i].v);
            	if(unionroot(x,y))
            	{
            		ans+=edge[i].w;
            		tmp++;
            	}     	
            }
            if(tmp!=n-1)
            printf("impossible
    ");
            else
            printf("%d
    ",ans); 
    		printf("
    ");      	
        }
    }
    

      

     
  • 相关阅读:
    iOS 记录近期遇到的几个bug
    iOS转场动画封装
    iOS 页面滑动与标题切换颜色渐变的联动效果
    Realm数据持久化方案的简单介绍和使用(二)
    某互联网科技公司的一道逻辑面试题
    js获取本月,本季度,上个季度,本周,上周的起始和结束时间
    CSS样式说明
    a标签的样式
    CSS3的> 和@
    CSS中的position定位
  • 原文地址:https://www.cnblogs.com/wuyuewoniu/p/4250842.html
Copyright © 2011-2022 走看看