zoukankan      html  css  js  c++  java
  • ACM: 限时训练题解- Travelling Salesman-最小生成树

     Travelling Salesman

     

    After leaving Yemen, Bahosain now works as a salesman in Jordan. He spends most of his time travelling between different cities. He decided to buy a new car to help him in his job, but he has to decide about the capacity of the fuel tank. The new car consumes one liter of fuel for each kilometer.

    Each city has at least one gas station where Bahosain can refill the tank, but there are no stations on the roads between cities.

    Given the description of cities and the roads between them, find the minimum capacity for the fuel tank needed so that Bahosain can travel between any pair of cities in at least one   way.

    Input

     

    The first line of input contains T (1 ≤ T ≤ 64) that represents the number of test   cases.

    The first line of each test case contains two integers: N (3 ≤ N ≤ 100,000) and M (N-1 ≤ M ≤ 100,000), where N is the number of cities, and M is the number of  roads.

    Each of the following M lines contains three integers: X Y C (1 ≤ X, Y ≤ N)(X ≠ Y)(1 ≤ C ≤   100,000), where

    C is the length in kilometers between city X and city Y. Roads can be used in both   ways.

    It is guaranteed that each pair of cities is connected by at most one road, and one can travel between any pair  of cities using the given  roads.

    Output

     

    For each test case, print a single line with the minimum needed capacity for the fuel tank.

    Sample Input

    Sample Output

    2

    4

    6

    7

    2

    1

    2

    3

    2

    3

    3

    3

    1

    5

    3

    4

    4

    4

    5

    4

    4

    6

    3

    6

    5

    5

    3

    3

    1

    2

    1

    2

    3

    2

    3

    1

    3

    /*
    题意:
    旅游者想走遍全世界,一共有N个城市,他需要买一辆车,但是他抠,想买便宜点的就是油箱最小的
    每条路走过需要消耗 cost的油,找出最小的油箱需求。
    
    这题正好是前几天刷的最小生成树,排序后,维护最小树的最大边就行,代码就不多加注释了。 
    
    AC代码: 
    */ 
    
    #include"iostream"
    #include"algorithm"
    #include"cstdio"
    #include"cstring"
    #include"cmath"
    #define MX 100000 + 50
    using namespace std;
    
    int pe[MX];
    struct node {
    	int u,v,cost;
    } road[MX];
    
    bool cmp(node a,node b) {
    	return a.cost<b.cost;
    }
    
    int find(int x) {
    	return pe[x]==x?x:(pe[x]=find(pe[x]));
    }
    int main() {
    	int T,n,q,num,maxx;
    	scanf("%d",&T);
    	while(T--) {
    		scanf("%d%d",&n,&q);
    		for(int i=0; i<=n; i++) {
    			pe[i]=i;
    		}
    		num=n-1;
    		for(int i=0; i<q; i++) {
    			scanf("%d%d%d",&road[i].u,&road[i].v,&road[i].cost);
    		}
    		maxx=0;
    		sort(road,road+q,cmp);
    		for(int i=0; i<q; i++) {
    			int rt1=find(road[i].u);
    			int rt2=find(road[i].v);
    			if(rt1!=rt2) {
    				pe[rt2]=rt1;
    				maxx=max(maxx,road[i].cost);
    				num--;
    			}
    			if(!num)break;
    		}
    		printf("%d
    ",maxx);
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    【C++学习】C++中的new VS C语言中的malloc
    【C++学习】多态——解析树实例分析
    【C++错误处理】multiple definition of
    VS.NET控件命名规范
    ASP.NET跨页面传值技巧总结
    marquee+js实现某个区域的“无缝滚动效果”
    vs2008与oracle数据库连接
    C#中HashTable的用法
    1. asp.net实现单点登陆
    GridView实现某列中相同值合并(不规则表)
  • 原文地址:https://www.cnblogs.com/HDMaxfun/p/5709483.html
Copyright © 2011-2022 走看看