标签:font 不能 上交 oid images 问题 while 数字 最大
#include<cstdio> #include<cstring> #include<algorithm> using std::min; using std::max; const int M=357; int read(){ int ans=0,f=1,c=getchar(); while(c<‘0‘||c>‘9‘){if(c==‘-‘) f=-1; c=getchar();} while(c>=‘0‘&&c<=‘9‘){ans=ans*10+(c-‘0‘); c=getchar();} return ans*f; } int n,m,k,map[M][M],h[M],ans[M][M]; struct node{int id,h;}q[M]; bool cmp(node a,node b){return a.h<b.h;} void floyd(){ memset(ans,0x3f,sizeof(ans)); std::sort(q+1,q+1+n,cmp); for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++){ map[i][j]=min(map[i][j],map[i][q[k].id]+map[q[k].id][j]); ans[i][j]=min(ans[i][j],map[i][j]+max(max(h[i],h[j]),q[k].h)); } } int main(){ int x,y,w; n=read(); m=read(); k=read(); memset(map,0x3f,sizeof(map)); for(int i=1;i<=n;i++) h[i]=q[i].h=read(),q[i].id=i; for(int i=1;i<=m;i++) x=read(),y=read(),w=read(),map[x][y]=map[y][x]=min(map[x][y],w); floyd(); for(int i=1;i<=k;i++) x=read(),y=read(),printf("%d\n",ans[x][y]); return 0; }
bzoj 1774: [Usaco2009 Dec]Toll 过路费 ——(改)floyd
标签:font 不能 上交 oid images 问题 while 数字 最大
原文地址:http://www.cnblogs.com/lyzuikeai/p/7572689.html