uva10048
2016-04-25 23:30
267 查看
题目描述:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=22156
/* solution: 此题可以直接套上floyd算法的模板,但是要把加法改成max 对于任意一条至少包含两条边的路径,i->j,一定存在k使得i->j 噪音的最高级等于max(d[i][k], d[k][j]),但i->j路径可能并不唯一, 所以还要取一条最小的:d[i][j] = min(d[i][j], max(d[i][k], d[k][j])); author: LinVan time: 2016/4/21 */ #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxC = 100 + 5; const int maxS = 1000 + 5; const int maxQ = 10000 + 5; const int INF = 99999; int c, s, q, d[maxC][maxC]; void floyd() { for(int k = 1; k <= c; k++) for(int i = 1; i <= c; i++) for(int j = 1; j <= c; j++) //if(d[i][k] < INF && d[k][j] < INF) d[i][j] = min(d[i][j], max(d[i][k], d[k][j])); } int main() { //freopen("input.txt", "r", stdin); int kase = 0; while(scanf("%d%d%d", &c, &s, &q) == 3 && c) { for(int i = 1; i <= c; i++) for(int j = 1; j <= c; j++) { if(i == j) d[i][j] = 0; else d[i][j] = INF; //初始化 } int a, b, val; for(int i = 1; i <= s; i++) { scanf("%d%d%d", &a, &b, &val); d[a][b] = d[b][a] = val; //注意数据输入是无向边 } if(kase) printf("\n"); printf("Case #%d\n", ++kase); floyd(); //floyd主算法 int u, v; //查询 for(int i = 0; i < q; i++) { scanf("%d%d", &u, &v); if(d[u][v] == INF) printf("no path\n"); else printf("%d\n", d[u][v]); } } return 0; }
相关文章推荐
- c++作业4
- 个人工作总结05
- WAMPserver无法正常启动,localhost 无法访问 测试80端口提示 your port 80 is not actually used
- 《Head First-Chapter2》观察者模式
- 问题总结--SSH诡异报错
- 2016-04-25Android基础 第一天 打电话
- 11、Tomcat使用、Servlet入门
- uva247
- vs2013 vassistx破解安装方法
- 算法导论 动态规划之最长回文子序列
- 搜索算法总结
- runloop 与autorelase对象、Autorelease Pool 在什么时候释放
- 【WEB】一个简单的WEB服务器
- codeforces 669E E. Little Artem and Time Machine(节点为map型的线段树)
- Java中Scanner对象
- android 时间时区设置
- springMVC(5)------@CookieValue获取cookie值
- [BZOJ1827][Usaco2010 Mar]gather 奶牛大集会(树形dp+维护)
- c++作业4
- 进程—Linux进程描述符初印象