UVa 10048 Audiophobia【Floyd】
2015-04-06 10:09
447 查看
题意:给出一个c个点,s条边组成的无向图,求一点到另一点的路径上最大权值最小的路径,输出这个值
可以将这个
d[i][j]=min(d[i][j],d[i][k]+d[k][j])
改成 d[i][j]=min(d[i][j],max(d[i][k],d[k][j]))
即为先找出最大权值的一条边,再从这些边中找出最小的
View Code
可以将这个
d[i][j]=min(d[i][j],d[i][k]+d[k][j])
改成 d[i][j]=min(d[i][j],max(d[i][k],d[k][j]))
即为先找出最大权值的一条边,再从这些边中找出最小的
#include<iostream> #include<cstdio> #include<cstring> #include <cmath> #include<stack> #include<vector> #include<map> #include<set> #include<queue> #include<algorithm> #define mod=1e9+7; using namespace std; typedef long long LL; const int INF = 0x7fffffff; const int maxn=110; int d[maxn][maxn]; int main(){ int n,m,q,i,j,k,kase=0,u,v,w; while(scanf("%d %d %d",&n,&m,&q)!=EOF&&n&&m&&q){ for(i=1;i<=n;i++){ for(j=1;j<=n;j++){ if(i==j) d[i][j]=0; else d[i][j]=INF; } } for(i=1;i<=m;i++){ scanf("%d %d %d",&u,&v,&w); d[u][v]=w;//无 向图,所以两个方向都赋上权值 d[v][u]=w; } for(k=1;k<=n;k++) for(i=1;i<=n;i++) for(j=1;j<=n;j++) d[i][j]=min(d[i][j],max(d[i][k],d[k][j])); if(kase) printf("\n"); printf("Case #%d\n",++kase); while(q--){ int x,y; scanf("%d %d",&x,&y); if(d[x][y]!=INF) printf("%d\n",d[x][y]); else printf("no path\n"); } } return 0; }
View Code
相关文章推荐
- UVa10048 Audiophobia (Floyd)
- UVA10048 Audiophobia[Floyd变形]
- UVa 10048 - Audiophobia 简单Floyd
- UVa 10048 Audiophobia(最短路&Floyd)
- UVA - 10048 Audiophobia (floyd+dp)
- UVA10048 Audiophobia (floyd变形)
- uva10048 ( floyd,最大值最小化)
- uva 10048 - Audiophobia(floyd 的变形)
- UVa 10048: Audiophobia
- UVA 10457 ,uva10048 kruskal,最小瓶颈树,floyd
- uva 10048【Audiophobia】
- UVA 10048 - Audiophobia
- UVA-10048 Audiophobia(最短路上的最小值,Folyd)
- POJ 3615 Cow Hurdles ,floyd 修改 , UVa 10048 Audiophobia
- UVA - 10048 Audiophobia
- UVa10048_Audiophobia(最短路/floyd)(小白书图论专题)
- UVa 10048 Audiophobia / floyd变形
- UVa 10048: Audiophobia
- UVa 10048 噪音恐惧症(Floyd)
- UVa 10048 Audiophobia