poj 2395 Out of Hay(最小生成树)
2015-12-23 12:42
781 查看
Out of Hay
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 13571 Accepted: 5251
Description
The cows have run out of hay, a horrible event that must be remedied immediately. Bessie intends to visit the other farms to survey their hay situation. There are N (2 <= N <= 2,000) farms (numbered 1..N); Bessie starts at Farm 1. She'll traverse some or all
of the M (1 <= M <= 10,000) two-way roads whose length does not exceed 1,000,000,000 that connect the farms. Some farms may be multiply connected with different length roads. All farms are connected one way or another to Farm 1.
Bessie is trying to decide how large a waterskin she will need. She knows that she needs one ounce of water for each unit of length of a road. Since she can get more water at each farm, she's only concerned about the length of the longest road. Of course, she
plans her route between farms such that she minimizes the amount of water she must carry.
Help Bessie know the largest amount of water she will ever have to carry: what is the length of longest road she'll have to travel between any two farms, presuming she chooses routes that minimize that number? This means, of course, that she might backtrack
over a road in order to minimize the length of the longest road she'll have to traverse.
Input
* Line 1: Two space-separated integers, N and M.
* Lines 2..1+M: Line i+1 contains three space-separated integers, A_i, B_i, and L_i, describing a road from A_i to B_i of length L_i.
Output
* Line 1: A single integer that is the length of the longest road required to be traversed.
Sample Input
3 3
1 2 23
2 3 1000
1 3 43
Sample Output
43
solution:
只需要每次找出最小生成树边的最大值就好,但是要注意有重边的情况!
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 13571 Accepted: 5251
Description
The cows have run out of hay, a horrible event that must be remedied immediately. Bessie intends to visit the other farms to survey their hay situation. There are N (2 <= N <= 2,000) farms (numbered 1..N); Bessie starts at Farm 1. She'll traverse some or all
of the M (1 <= M <= 10,000) two-way roads whose length does not exceed 1,000,000,000 that connect the farms. Some farms may be multiply connected with different length roads. All farms are connected one way or another to Farm 1.
Bessie is trying to decide how large a waterskin she will need. She knows that she needs one ounce of water for each unit of length of a road. Since she can get more water at each farm, she's only concerned about the length of the longest road. Of course, she
plans her route between farms such that she minimizes the amount of water she must carry.
Help Bessie know the largest amount of water she will ever have to carry: what is the length of longest road she'll have to travel between any two farms, presuming she chooses routes that minimize that number? This means, of course, that she might backtrack
over a road in order to minimize the length of the longest road she'll have to traverse.
Input
* Line 1: Two space-separated integers, N and M.
* Lines 2..1+M: Line i+1 contains three space-separated integers, A_i, B_i, and L_i, describing a road from A_i to B_i of length L_i.
Output
* Line 1: A single integer that is the length of the longest road required to be traversed.
Sample Input
3 3
1 2 23
2 3 1000
1 3 43
Sample Output
43
solution:
只需要每次找出最小生成树边的最大值就好,但是要注意有重边的情况!
#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> using namespace std; int dis[2300], cost[2300][2300], n,m; bool used[2300]; int prim(int n) { int i, j; int maxn= 0; memset(used, 0, sizeof(used)); for (i = 0; i < n; i++) dis[i] = cost[0][i]; dis[0] = 0; while (1) { int v = -1, u; for (u = 0; u < n; u++) if (used[u] == 0 && (v == -1 || dis[u] < dis[v]))v = u; if (v == -1)break; used[v] = -1; maxn=max(maxn,dis[v]); for (u = 0; u < n; u++) dis[u] = min(dis[u], cost[v][u]); } return maxn; } int main() { while (~scanf("%d%d", &n,&m)) { int a, b,c; for (int i = 0; i < 2300; i++) for (int j = 0; j < 2300; j++) cost[i][j] = 1e9; for (int i = 0; i < m; i++) { scanf("%d%d%d", &a,&b,&c); a--; b--; if (cost[a][b] > c) { cost[a][b] = cost[b][a] = c; } } printf("%d\n", prim(n)); } return 0; }
相关文章推荐
- linux内核中的GPIO系统之(2):pin control subsystem
- 你为什么要努力?(很深刻)
- ARM LINUX 扩展串口
- 创业板VOL-MY 10点研究
- CBIR: Indexing and Retrieval--基于内容的图像检索:索引和检索
- C语言学习笔记----伊能C语言学习笔记-----函数的副本机制
- bzoj3110: [Zjoi2013]K大数查询 【cdq分治&树套树】
- 软件工程学习总结
- Sales Engineer
- Android 基于MVC的MVVM模式开发
- Android 基于MVC的MVVM模式开发
- 回归测试的精确化
- poj 3422 Kaka's Matrix Travels 费用流
- ip地址库选择
- 查找兄弟单词
- EEROR: "***" [***.ko] undefined! 的错误原因和解决办法
- “ 智慧的都是简单的” ——中国人的四大传统智慧
- 微软研究院Detour开发包之API拦截技术
- C++实用技巧(四)
- 大帅的有道云笔记