您的位置:首页 > 其它

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(可能
//是更新源点到其他点的最短路径,本题是更新源点到其他点的最大
//流).
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: