题目链接:http://poj.org/problem?id=1502
题意:一个处理器给n-1个处理器发送广播,问最短时间。广播时并发,也就是各个路径就大的一方。输入如果是x的话说明两个处理器不能相互通信。输入是矩阵的左三角。
题解:一个最短路的裸题吧。输入的时候注意一下字符的转换。floyd爆一遍之后再对每个路径找最大值即可。
代码:
1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<iostream> 5 using namespace std; 6 7 const int N=110; 8 const int inf = 1e9; 9 char s[20]; 10 int n; 11 int mp[N][N]; 12 13 14 void init(){ 15 for(int i = 1 ; i <= n ;i++){ 16 for(int j = 1; j <= n ;j++){ 17 if(i == j){ 18 mp[i][j] = 0; 19 } 20 else{ 21 mp[i][j] = inf; 22 } 23 } 24 } 25 } 26 void floyd(){ 27 for(int k = 1; k <= n ; k++){ 28 for(int i = 1; i <= n ;i++){ 29 for(int j = 1; j <= n ;j++){ 30 mp[i][j] = min(mp[i][j],mp[i][k] + mp[k][j]); 31 } 32 } 33 } 34 int ans = -inf; 35 for(int i = 1; i <= n ;i++){ 36 if(mp[1][i] != inf){ 37 ans = max(ans,mp[1][i]); 38 } 39 40 } 41 cout<<ans<<endl; 42 } 43 44 int main(){ 45 cin>>n; 46 init(); 47 for(int i = 2; i <= n ;i++){ 48 for(int j = 1; j < i; j++){ 49 cin>>s; 50 if(s[0]!= 'x'){ 51 int num = atoi(s); 52 mp[i][j] = mp[j][i] = num; 53 } 54 } 55 } 56 floyd(); 57 return 0; 58 }