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("
    ");      	
        }
    }
    

      

     
  • 相关阅读:
    Mac 安装brew的正确姿势
    Jmeter分布式压测及踩坑记录
    Jmeter录制脚本
    mitmproxy使用详解
    Python单元测试框架pytest常用测试报告类型
    基于Java+Spring Boot开源项目JeeSite的Jenkins持续交付介绍
    Maven入门
    Linux Shell 编程基础详解——吐血整理,墙裂推荐!
    使用Jenkins+Blue Ocean 持续构建自动化部署之安卓源码打包、测试、邮件通知
    使用Jenkins+Pipline 持续构建自动化部署之安卓源码打包、测试、邮件通知
  • 原文地址:https://www.cnblogs.com/wuyuewoniu/p/4250842.html
Copyright © 2011-2022 走看看