POJ-1797 Heavy Transportation
2015-08-31 23:06
489 查看
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 1000 + 5; int t, n, m, ans; struct node { int op; int ed; int len; bool operator < (const node Next) const { return len > Next.len; } } *edge; int root[maxn]; int Find(int x) { return root[x] == x ? x : root[x] = Find(root[x]); } void Kruskal() { for(int i = 1; i <= n; i ++) root[i] = i; sort(edge, edge + m); for(int i = 0; i < m; i ++) { int x = Find(edge[i].op); int y = Find(edge[i].ed); if(x != y) { root[y] = x; if(Find(1) == Find(n)) { ans = edge[i].len; break; } } } } int main() { scanf("%d", & t); int cas = 0; while(t --) { scanf("%d %d", & n, & m); edge = new node[m]; for(int i = 0; i < m; i ++) scanf("%d %d %d", & edge[i].op, & edge[i].ed, & edge[i].len); Kruskal(); printf("Scenario #%d:\n", ++ cas); printf("%d\n\n", ans); } return 0; }
题意:
(摘自 永夜初晗凝碧天)
题目大意是就是何处一个图,n个顶点和m条边,每个边都有最大承载量,现在我要从1点运送货物到n点,求能运送货物的最大重量。
对于数据,第一行为t代表测试数据个数,第二行为n和m(意义见上),接着m行,每行三个整数分别是代表一条边的起点,终点及最大承重量。输出能运送货物的最大重量,格式见样例。注意数据输完后还要再多输一个空行。
对于数据,从1运到3有两种方案
方案1:1-2-3,其中1-2承重为3,2-3承重为5,则可以运送货物的最大重量是3(当大于3时明显1到不了2)
方案2:1-3,可知1-3承重为4,故此路可运送货物的最大重量是4,故答案输出4
题解:
没什么特别的..和上一道题应该说是一样的类型。最大生成树。排序从大到小排。动态申请了内存..*edge-> edge = new node[m]。
相关文章推荐
- VS中修改站点运行方式(集成 Or 经典)
- react.js 从零开始(三)JSX 语法及特点介绍
- spark
- SPI小节
- uva 1373 - How I Wonder What You Are!(几何)
- Linux之文本编辑器VIM
- 分享作为程序猿的快乐
- [C++11 并发编程] 16 在期望中保存异常
- 3D GAME PROGRAMMING WITH DIRECTX11 (1)
- Java多线程之线程生命周期以及线程各个时期的状态
- 人人网用户信息爬虫
- 分享作为程序猿的快乐
- [Effective Java 读书笔记] 第三章 对所有对象都通用的方法 第八 ---- 九条
- java 8 JVM性能优化
- Android控件之SlidingDrawer(滑动式抽屉)详解与实例
- Android项目开发实战:2D翻转
- [Objective-c]_[NSString的基本使用]
- 半监督学习漫谈
- 新浪微博海量数据存储模式分析
- uva 1100 - Paperweight(几何重心)