hdu 2066 一个人的旅行

来源:互联网 发布:ubuntu 桌面壁纸 编辑:程序博客网 时间:2024/06/04 19:20

最短路问题,果然好久不做都忘得差不多了,跑一次Dijkstra算法把所有点的最短距离都跑出来

#include<iostream>#include<cstring>#define maxn 1005#define inf 1<<30using namespace std;int t,s,d;int mapp[maxn][maxn];int w[maxn];int visit[maxn];int di[maxn];void solve(){memset(visit,0,sizeof(visit));fill(di,di+maxn,inf);di[0]=0;while(t--){int v=-1;for(int i=0;i<maxn;i++){if(!visit[i]&&(v==-1||di[i]<di[v])) v=i;}//cout<<s<<"~"<<v<<endl;visit[v]=1;for(int i=0;i<maxn;i++){if(mapp[v][i]!=inf){di[i]=min(di[i],di[v]+mapp[v][i]);//cout<<i<<"~"<<di[i]<<endl;}}}}int main(){while(cin>>t>>s>>d){for(int i=0;i<maxn;i++){for(int j=0;j<maxn;j++) mapp[i][j]=inf;}for(int i=0;i<t;i++){int x,y,z;cin>>x>>y>>z;mapp[y][x]=mapp[x][y]=min(z,mapp[x][y]);}for(int i=0;i<s;i++){int x;cin>>x;mapp[0][x]=mapp[x][0]=0;}for(int i=0;i<d;i++) cin>>w[i];solve();int re=inf;for(int i=0;i<d;i++){re=min(re,di[w[i]]);}cout<<re<<endl;}return 0;}


0 0
原创粉丝点击