一个人的旅行 HDU - 2066
2017-08-23 20:10
323 查看
最短路模板题
仅仅将草儿的位置定为0,即可
以下为我用链式前向星写的最短路
仅仅将草儿的位置定为0,即可
以下为我用链式前向星写的最短路
#include<iostream> #include<cstdio> #include<cstring> #include<queue> #include<algorithm> using namespace std; const int maxn=500005; const int inf=0x3f3f3f3f; int vis[maxn],head[maxn],dis[maxn]; int cnt=0; struct edge { int next,v,w; }edge[maxn*4]; struct node { int distance,point; node(){} node(int _point,int _distance) { distance=_distance; point=_point; } friend bool operator <(node aa,node bb) { return aa.distance>bb.distance; } }; void add_edge(int u,int v,int w) { edge[cnt].v=v; edge[cnt].w=w; edge[cnt].next=head[u]; head[u]=cnt++; } void zyz(int s) { int i; for(i=0;i<=1010;i++) dis[i]=inf; dis[s]=0; priority_queue<node> q; memset(vis,0,sizeof(vis)); q.push(node(s,dis[s])); while(!q.empty()) { node now; now=q.top(); q.pop(); if(vis[now.point]) continue; vis[now.point]=1; for(i=head[now.point];i!=-1;i=edge[i].next) { int to=edge[i].v; if(dis[to]>dis[now.point]+edge[i].w) { dis[to]=dis[now.point]+edge[i].w; q.push(node(to,dis[to])); //cout<<to<<" "<<dis[to]<<endl; } } } } int main () { int s,t,d; while(~scanf("%d%d%d",&t,&s,&d)) { cnt=0; memset(head,-1,sizeof(head)); int i; for(i=1;i<=t;i++) { int xx,yy,zz; scanf("%d%d%d",&xx,&yy,&zz); add_edge(xx,yy,zz); add_edge(yy,xx,zz); } for(i=1;i<=s;i++) { int xx; scanf("%d",&xx); add_edge(xx,0,0); add_edge(0,xx,0); } zyz(0); int minn=inf; for(i=1;i<=d;i++) { int xx; scanf("%d",&xx); // cout<<dis[xx]<<endl; minn=min(minn,dis[xx]); } printf("%d\n",minn); } }
相关文章推荐
- hdu-2066 一个人的旅行
- hdu 2066:一个人的旅行
- HDU-2066-一个人的旅行
- HDU【2066】一个人的旅行
- HDU 2066 一个人的旅行
- HDU 2066 一个人的旅行(Dijkstra)
- hdu2066 一个人的旅行 (floyd)
- hdu 2066 一个人的旅行 Dijkstra+优先队列优化
- Hdu 2066 一个人的旅行(dijkstra算法,超级起点)
- hdu 2066 一个人的旅行 最短路 dijkstra 解题报告
- HDU 2066 一个人的旅行.
- hdu 2066 一个人的旅行
- hdu 2066 一个人的旅行(超级纠结)终于AC (用邻接表写了一个)
- HDU-2066 一个人的旅行(最短路[Floyd])
- HDU 2066 一个人的旅行(Dijkstra算法)
- hdu 2066 一个人的旅行(最短路)
- hdu 2066 一个人的旅行(最短路)
- hdu 2066 一个人的旅行(裸dijkstra)
- HDU 2066 一个人的旅行
- HDU 2066 一个人的旅行