您的位置:首页 > 编程语言 > C语言/C++

C++ P0003 服务点设置

2016-12-09 16:42 134 查看
题目:P0003 服务点设置

floyd最短路,用一个它本身的性质:所有点中的某个点,与它之外的点的最短路一并计算。

再看数据范围,小的可怜,所有直接O(n^3)的floyd。

# include <iostream>
# include <cstdio>
using namespace std;
const int maxn = 0x7fffffff/3;
int map[110][110], n, m, u, v, t, minx = maxn, mins, cost;
int main() {
//	freopen("djsa.in", "r", stdin);
//	freopen("djsa.out", "w", stdout);
cin >> n >> m;
for(int i = 0; i < n; i++) // 初始化无穷大
for(int j = 0; j < n; j++)
map[i][j] = maxn;
for(int i = 1; i <= m; i++) {
cin >> u >> v >> t;
map[u][v] = map[v][u] = t; // 双向边
}
for(int i = 0; i < n; i++) // Floyd
for(int j = 0; j < n; j++)
for(int z = 0; z < n; z++)
map[j][z] = min(map[j][z], map[j][i] + map[i][z]);
for(int i = 0; i < n; i++){
mins = 0; // i点到它其它点最短路中最大的边权
for(int j = 0; j < n; j++)
if(j != i) mins = max(mins, map[i][j]); // 更新mins
// minx 图中最短路最小边权
if(minx > mins) { // 如果有mins会更小,那么记录下来,在更新minx
cost = i; minx = mins;
}
}
cout << cost;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 算法 服务点设置