bnuoj 20950 沉重的货物 (最小生成树)
沉重的货物
CUITCPC是一个专门生产大型货运火车的工厂。他们的新型货运火车XX V1.0,是如此之大,以至于可以运输的货物的重量并不取决于那个火车本身,而只是受限于你所通过的铁路的承重。
给你出发和目标城市,你的任务就是求出火车从初始城市到目标城市的最大载重。
Input
输入可能包括一组或者多组测试数据。每一个测试数据的前两行是两个整数:城市的数量n(2<=n<=1000)和铁路的条数r(1<=r<= 19900)。
紧接着是r行,每一行描述一条连接两个城市的铁路以及这段铁路所能承受的最大重量。城市名不会超过30个字符,也不会有空白字符出现在城市名中。承重是一个0-10000的整数。铁路都是双向的。
最后一行是两个城市的名字:初始城市和目标城市。
输入的结束条件是n和r都为0
Output
对于每一组测试数据
输出包括3行:
l 一行输出"Scenario #x",其中x是测试数据的组数
l 一行输出"y tons",其中y表示最大载重量
l 一个空行
Sample Input
4 3 ACM ICPC 100 ICPC World 80 World CPC 120 ACM CPC 5 5 ACM ICPC 100 ICPC World 80 World CPC 120 ACM Chengdu 220 Chengdu CPC 170 CPC ACM 0 0
Sample Output
Scenario #1 80 tonsScenario #2 170 tons
这是昨天晚上比赛的一道题,个人感觉这题还不错,只可惜当时没有做出来。读完题看出来了是一道最大流的题目,但我没有仔细的学过网络流,我按照书上的模板打完之后又发现不能直接套模板。比赛完听队友说也可以用最小生成树或者搜索来做,看来我想的太少了。
#include<iostream>
#include<cstring>
#include<string>
#include<map>
using namespace std;
const int INF = 0x3fffffff;
const int N = 1e4;
int n, m, Min;
int cap[N][N], low[N], vis[N];
void Init(int n)
{for(int i = 0; i <= n; i++)for(int j = 0; j <= n; j++)cap[i][j] = -INF;
}
void Prim(int s, int e)
{int i, j;memset(vis, 0, sizeof(vis));memset(low, -1, sizeof(low));for(i = 1; i <= n; i++)if(cap[s][i] != -INF)low[i] = cap[s][i];vis[s] = 1;for(i = 1; i < n; i++){int mmax = -1, pos;for(j = 1; j <= n; j++)if(!vis[j] && low[j] > mmax)mmax = low[pos = j];if(mmax == -1) break; //此句可加可不加,执行此句时肯定加入了已经n-1条边Min = Min < mmax ? Min : mmax;if(pos == e) break;vis[pos] = 1;for(j = 1; j <= n; j++)if(!vis[j] && cap[pos][j] > low[j])low[j] = cap[pos][j];}
}
int main()
{int i, j, t, w, cas = 1;map<string, int> mp;string str1, str2;while(cin >> n >> m){if(!n && !m) break;Min = INF;mp.clear();Init(n);t = 1;for(i = 0;i < m; i++){cin >> str1 >> str2 >> w;if(mp.find(str1) == mp.end())mp[str1] = t++;if(mp.find(str2) == mp.end())mp[str2] = t++;int x = mp[str1], y = mp[str2];cap[x][y] = cap[y][x] = w;}cin >> str1 >> str2;Prim(mp[str1], mp[str2]);cout << "Scenario #" << cas++ << endl;cout << Min << " tons" << endl;cout << endl;}return 0;
}
bnuoj 20950 沉重的货物 (最小生成树)相关推荐
- 《七哥说道》第五章:入职惨做苦力,画饼一望无际
[转载请注明]: 原文出处:https://www.cnblogs.com/jstarseven/p/10521426.html 作者:jstarseven 码字挺辛苦的..... "你是 ...
- 【算法设计与分析】经典常考三十三道例题AC代码
❥小虾目前大三,我校在大一下开设<数据结构>这门课,大二上开了<算法设计与分析>这门课,很庆幸这两门课的上机考试总成绩一门100,一门99,最后总分也都90+.下文会给出机试的 ...
- 四足机器人技术及进展
四足机器人技术及进展 摘 要:自然界中有许多地形无法使用传统轮式或履带式车辆到达,而哺乳动物却能够在这些地形行走自如,这充分展示出四足移动方式的优势.四足机器人已经成为当今移动机器人研究的热点,其研 ...
- 速围观!上千款“AI黑科技”在此集结
尬舞机器人.AI虚拟主播.自动驾驶车.5G无人机.仿生人形机器人,在 AIExpo 展会上可谓吸足了眼球. 8月14日,全球人工智能产品博览会(AIExpo 2020)在苏州国际博览中心盛大启幕. 为 ...
- 【百川云栖分享】孤星:移动网络体验的升级——手淘海量移动网络服务的探索...
[2016杭州·云栖大会]阿里百川在"淘宝移动技术实践&开放"专场演讲中,分别邀请了来自淘宝移动平台基础平台部负责人吴志华(花名:天施)和阿里百川负责人斯登宇(花名:承渊) ...
- 2017lao蒋全程2017词汇班(真题词汇特训二)
2019独角兽企业重金招聘Python工程师标准>>> apply v. 申请(向别人申请时鞠躬):应用 ap+ply=(plex折叠) 'complex复杂的(把东西折叠在一起) ...
- 绝对的好文,有点长,耐心点,说不定你的人生因此改变
http://zhangyouping.blog.caixin.com/archives/25919"现在是午餐时间,你3点以后再打来吧."那不是我的工作."" ...
- 莲花——安妮宝贝§2006-03-01出版
序:柒种 1这是一本以真实地点为背景的长篇小说.既是小说,说明它完全来源于虚构.因为虚构,地点产生新的暗示.仿佛所写的此地,另有他方.它和真实的关系变得微妙.涉水而过,投奔岸的另一边. 一张<喜 ...
- 图论之tarjan真乃神人也,强连通分量,割点,桥,双连通他都会
先来%一下Robert Tarjan前辈 %%%%%%%%%%%%%%%%%% 然后是热情感谢下列并不止这些大佬的博客: 图连通性(一):Tarjan算法求解有向图强连通分量 图连通性(二):Tarj ...
最新文章
- ubuntu宽带拨号linux,Ubuntu 通过无线进行ADSL拨号
- PHP传值及引用_无需整理
- 【编译原理】第二章课后习题(王生原版)
- WPF基础到企业应用系列7——深入剖析依赖属性(三)
- 打开多个界面_如何创建用户界面
- Retrofit的使用教程(二)
- 微波网络中参考面移动对散射参量的影响
- QTP提示加载数据表文件时出错的解决方案
- 用Java写一个浪费cpu的程序_Java程序是如何浪费内存的
- python简述程序的ipo结构_python程序流程图
- 计算机控制系统电阻加热课设,计算机控制系统课程设计资料.doc
- 16进制颜色代码转RGB代码
- css 间隙,CSS间隙属性
- Python爬虫基础1_urllib库1
- Windows无法安装到GPT格式磁盘的根本解决办法 - 初学者系列 - 学习者系列文章...
- 使用vi编辑器编辑一个C语言源程序hello.c,并使用编译工具GCC编译该源程序。
- 01.使用微软官方工具制作启动U盘--非常推荐
- 智能发展的四个层次:运算智能,感知智能,认知智能,强智能。道翰天琼认知智能。
- 组合数的几种常规求法
- 微信小程序独家秘笈之抽奖大转盘
热门文章
- F5金飞:“双十一”安全事项三部曲
- JedisPool无法获得资源问题
- iOS Cookie相关操作
- Revit API取得变量的内参名称
- [转]设置 UILabel 和 UITextField 的 Padding 或 Insets
- 如何确定Oracle是32 Bit(位)的还是64 Bit(位)的?
- Feedback about (Blockchain OR ML) AND (logistics)
- How can ifm help the SME WELL?
- my current understanding of learning and graduate studies
- XJTLU Outstanding Student for 2017-2018!