最短路练习
Posted flicker-five
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最短路练习相关的知识,希望对你有一定的参考价值。
9021#1259香甜的黄油
模板题了。稍微有点背景。
很好过,不多说。
给出点权。边权全部为1。求设在哪个牧场,牛的总移动距离最短。
无论是Floyd还是dijistra,都要有一步假设这个牧场为答案进行计算。不算不知道啊,所以几个牧场,几次计算。
对于Floyd,直接计算;对于dijstra,几个牧场,要跑几次单源最短路径,然后计算。
Floyd
dijstra+堆优化
真是快的一批。。
1 #include <iostream> 2 #include <cstdio> 3 #define R register 4 #define INF 0x7fffffff 5 using namespace std; 6 int ans=INF; 7 int n,p,c,g[810][810],a[510]; 8 inline int ri(){ 9 char c=getchar();int x=0,w=1; 10 while(!isdigit(c)){if(c==‘-‘)w=-1;c=getchar();} 11 while( isdigit(c)){x=(x<<3)+(x<<1)+c-48;c=getchar();} 12 return x*w; 13 } 14 int main(){ 15 int num,x,y; 16 for(R int i=1;i<=800;++i) 17 for(R int j=1;j<=800;++j) 18 g[i][j]=1000000; 19 20 for(R int i=1;i<=800;++i) 21 g[i][i]=0; 22 23 n=ri(),p=ri(),c=ri(); 24 for(R int i=1;i<=n;++i) 25 num=ri(),a[num]++; 26 27 for(R int i=1;i<=c;++i) 28 x=ri(),y=ri(),num=ri(),g[x][y]=g[y][x]=num; 29 30 for(R int k=1;k<=p;++k) 31 for(R int i=1;i<=p;++i) 32 for(R int j=1;j<=p;++j) 33 if(g[i][k]+g[k][j]<g[i][j])g[i][j]=g[i][k]+g[k][j]; 34 for(R int i=1;i<=p;++i){ 35 int tot=0; 36 for(R int j=1;j<=p;++j)tot+=g[i][j]*a[j]; 37 ans=min(ans,tot); 38 } 39 printf("%d",ans); 40 return 0; 41 }
#include <iostream> #include <cstdio> #define R register #define INF 0x7fffffff using namespace std; int ans=INF; int n,p,c,g[810][810],a[510]; inline int ri(){ char c=getchar();int x=0,w=1; while(!isdigit(c)){if(c==‘-‘)w=-1;c=getchar();} while( isdigit(c)){x=(x<<3)+(x<<1)+c-48;c=getchar();} return x*w; } int main(){ int num,x,y; for(R int i=1;i<=800;++i) for(R int j=1;j<=800;++j) g[i][j]=1000000; for(R int i=1;i<=800;++i) g[i][i]=0; n=ri(),p=ri(),c=ri(); for(R int i=1;i<=n;++i) num=ri(),a[num]++; for(R int i=1;i<=c;++i) x=ri(),y=ri(),num=ri(),g[x][y]=g[y][x]=num; for(R int k=1;k<=p;++k) for(R int i=1;i<=p;++i) for(R int j=1;j<=p;++j) if(g[i][k]+g[k][j]<g[i][j])g[i][j]=g[i][k]+g[k][j]; for(R int i=1;i<=p;++i){ int tot=0; for(R int j=1;j<=p;++j)tot+=g[i][j]*a[j]; ans=min(ans,tot); } printf("%d",ans); return 0; }
以上是关于最短路练习的主要内容,如果未能解决你的问题,请参考以下文章