hdu 2066 一个人的旅行
2015-06-27 21:22
302 查看
最短路问题,果然好久不做都忘得差不多了,跑一次Dijkstra算法把所有点的最短距离都跑出来
#include<iostream> #include<cstring> #define maxn 1005 #define inf 1<<30 using 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; }
相关文章推荐
- c# 了解c# 面向对象
- C# 判断字符串是否为数字
- “概要设计说明书”编写规范
- Windows API OpenURL无法设置超时时间替换方法
- ehcache jgroups 集群配置
- Linux远程连接putty出现Network Erroe: Software caused connection abort
- 应用管理之Interface
- 关于编译报错“dereferencing pointer to incomplete type...
- leetcode--CourseScheduleII
- C++中的sort函数
- 【Leetcode】【Easy】Isomorphic Strings
- 自动登录界面
- eclipse中hibernate配置文件自动提示
- iOS开发——CoreBluetooth蓝牙开发(二)
- C++13.3 析构函数destructor
- 多路归并使用败者树的性能分析
- 使用AsyncTask实现网络数据的异步访问
- 需求调研报告(用户需求说明书)编写规范
- Spring过滤器filter拦截服务
- 150.按规定输出