[USACO07NOV]牛栏Cow Hurdles

OJ题号:洛谷2888

思路:修改Floyd,把边权和改为边权最大值。另外注意是有向图。

 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 #define inf 0x7fffffff
 5 int main() {
 6     int n,m,t;
 7     scanf("%d%d%d",&n,&m,&t);
 8     int d[n+1][n+1];
 9     for(int i=1;i<=n;i++) {
10         for(int j=1;j<=n;j++) {
11             d[i][j]=(i==j)?0:inf;
12         }
13     }
14     while(m--) {
15         int s,e,h;
16         scanf("%d%d%d",&s,&e,&h);
17         d[s][e]=h;
18     }
19     for(int k=1;k<=n;k++) {
20         for(int i=1;i<=n;i++) {
21             for(int j=1;j<=n;j++) {
22                 d[i][j]=min(d[i][j],max(d[i][k],d[k][j]));
23             }
24         }
25     }
26     while(t--) {
27         int a,b;
28         scanf("%d%d",&a,&b);
29         printf("%d\n",(d[a][b]!=inf)?d[a][b]:-1);
30     }
31     return 0;
32 }

 

posted @ 2017-05-22 21:01  skylee03  阅读(145)  评论(0编辑  收藏  举报