poj 2377 Bad Cowtractors(最大生成树!)
2015-09-17 21:31
357 查看
Description
Input
Output
Sample Input
Sample Output
Hint
Source
USACO 2004 December Silver
其实不过就是裸的最小生成树,(kruscal实现),只不过这里的话要将边按从大到小排序,然后判断一下是不是连通的就可以了。
View Code
Bessie has been hired to build a cheap internet network among Farmer John's N (2 <= N <= 1,000) barns that are conveniently numbered 1..N. FJ has already done some surveying, and found M (1 <= M <= 20,000) possible connection routes between pairs of barns. Each possible connection route has an associated cost C (1 <= C <= 100,000). Farmer John wants to spend the least amount on connecting the network; he doesn't even want to pay Bessie. Realizing Farmer John will not pay her, Bessie decides to do the worst job possible. She must decide on a set of connections to install so that (i) the total cost of these connections is as large as possible, (ii) all the barns are connected together (so that it is possible to reach any barn from any other barn via a path of installed connections), and (iii) so that there are no cycles among the connections (which Farmer John would easily be able to detect). Conditions (ii) and (iii) ensure that the final set of connections will look like a "tree".
Input
* Line 1: Two space-separated integers: N and M * Lines 2..M+1: Each line contains three space-separated integers A, B, and C that describe a connection route between barns A and B of cost C.
Output
* Line 1: A single integer, containing the price of the most expensive tree connecting all the barns. If it is not possible to connect all the barns, output -1.
Sample Input
5 8 1 2 3 1 3 7 2 3 10 2 4 4 2 5 8 3 4 6 3 5 2 4 5 17
Sample Output
42
Hint
OUTPUT DETAILS: The most expensive tree has cost 17 + 8 + 10 + 7 = 42. It uses the following connections: 4 to 5, 2 to 5, 2 to 3, and 1 to 3.
Source
USACO 2004 December Silver
其实不过就是裸的最小生成树,(kruscal实现),只不过这里的话要将边按从大到小排序,然后判断一下是不是连通的就可以了。
#pragma comment(linker, "/STACK:1024000000,1024000000") #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<math.h> #include<algorithm> #include<queue> #include<set> #include<bitset> #include<map> #include<vector> #include<stdlib.h> #include <stack> using namespace std; #define PI acos(-1.0) #define max(a,b) (a) > (b) ? (a) : (b) #define min(a,b) (a) < (b) ? (a) : (b) #define ll long long #define eps 1e-10 #define MOD 1000000007 #define N 1006 #define M 20006 #define inf 1e12 struct Node{ int x,y; int cost; }edge[M]; int n,m; int fa ; void init(){ for(int i=0;i<N;i++){ fa[i]=i; } } int find(int x){ return fa[x]==x?x:fa[x]=find(fa[x]); } bool cmp(Node a,Node b){ return a.cost>b.cost; } int main() { while(scanf("%d%d",&n,&m)==2){ init(); for(int i=0;i<m;i++){ int a,b,c; scanf("%d%d%d",&edge[i].x,&edge[i].y,&edge[i].cost); } sort(edge,edge+m,cmp); int ans=0; int num=n-1; for(int i=0;i<m;i++){ int root1=find(edge[i].x); int root2=find(edge[i].y); if(root1!=root2){ ans+=edge[i].cost; fa[root1]=root2; num--; } } if(num!=0){ printf("-1\n"); } else{ printf("%d\n",ans); } } return 0; }
View Code
相关文章推荐
- java 关键字之static
- 【最全干货】机器视觉的资料整理
- 计算机组成原理知识点汇总
- visibility:hidden和display:none的区别
- iOS开发中 new与alloc/init的区别 及 [NSArray array] 和 [[NSArray alloc]init] 及 self. 和 _ 的区别
- 关于if与else中不要随意添加使变量改变的操作
- iframe框架嵌套技巧(全屏,去双滚动条)
- HDU 1394 线段树
- UI09_协议控制
- 一道百度笔试题
- 涨了两个大姿势
- 一个简单的GI--Reflective Shadow Maps
- [codevs1090]加分二叉树
- test4.5
- 自动化运维工具ansible学习+使用ansible批量推送公钥到远程主机
- 2015网络赛&HDU5444 Elven Postman - 排序二叉树
- Netbeans的使用:如何用Netbeans构建GUI程序
- java网络编程socket\server\TCP笔记(转)
- 对象生成方式总结
- Linux下python连接sqlserver