pku 1797
2009-02-24 22:12
183 查看
#include <iostream> using namespace std; #define MAX 1001 #define INF 1000001 int matrix[MAX][MAX]; int dis[MAX]; int s[MAX]; void MaxWeight(int& v) { int u; for(int i = 1; i <= v; ++i) { dis[i] = matrix[1][i]; s[i] = 0; } s[1] = 1; int maxDis; for(int i = 1; i <= v - 1; ++i) { maxDis = 0; for(int j = 1; j <= v; ++j) if(!s[j] && dis[j] > maxDis) { u = j; maxDis = dis[j]; } s[u] = 1; for(int j = 1; j <= v; ++j) if(!s[j] && (dis[u]<matrix[u][j]?dis[u]:matrix[u][j]) > dis[j] ) dis[j] = (dis[u]<matrix[u][j]?dis[u]:matrix[u][j]); } } int main() { int N; int v, m; int v1, v2; scanf("%d", &N); for(int i = 1; i<= N; ++i) { scanf("%d%d", &v, &m); memset(matrix, 0, sizeof(int)*MAX*MAX); for(int j = 1; j <= m; ++j) { scanf("%d%d",&v1, &v2); scanf("%d", &matrix[v1][v2]); matrix[v2][v1] = matrix[v1][v2]; } MaxWeight(v); printf("Scenario #%d:/n%d/n/n", i, dis[v]); } return 0; } // 把握找到最大值边后更新的的最优子结构: // dis[j] = max{d[j], min{dis[u], matrix[u][j]}} // 关键就是加入新的最值点时,怎样更新源点到其他点的dis(可能 //是更新源点到其他点的最短路径,本题是更新源点到其他点的最大 //流).
相关文章推荐
- pku 1797利用kruskal算法的过程
- PKU 1797 Heavy Transportation(Kruscal)
- pku 1797 Heavy Transportation 分支界限法
- pku 1797 Heavy Transportation(最短路径)
- pku acm 1061
- pku 3660
- pku acm 1035
- pku 1655 Balancing Act (树状)
- PKU 2987
- POJ1390 Blocks——动态规划——pku1390
- hrbeu 放苹果 pku 1664 动态规划
- 我的空间第一篇日志,关于PKU 1002号题目的
- pku3450 Corporate Identity &&pku3080 Blue Jeans(枚举+KMP)
- PKU3624 0-1背包问题
- PKU 3468 线段树
- PKU ACM 1860 Bellman - Ford 算法
- PKU ACM经典50题
- PKU DP专题
- pku 1236 Network of Schools (tarjan缩点)
- POJ 1797(dijkstra)