hdu2066 一个人的旅行 最短路
2017-03-19 03:30
302 查看
单源最短路裸题
View Code
1 #include<stdio.h> //基本需要的头文件 2 #include<string.h> 3 #include<queue> 4 #include<algorithm> 5 using namespace std; 6 const int INF=0x3f3f3f3f; 7 8 const int maxn=1e3+5; 9 const int maxm=1e5+5; 10 11 struct pii{ 12 int dis; 13 int s; 14 bool operator < (const pii x)const{ 15 return dis > x.dis; 16 } 17 pii(int a,int b):dis(a),s(b){}; 18 }; 19 int head[maxn],nxt[maxm<<1],val[maxm<<1],point[maxm<<1],size; 20 int dis[maxn]; 21 22 void init(){ 23 memset(head,-1,sizeof(head)); 24 size=0; 25 } 26 27 void add(int a,int b,int v){ 28 point[size]=b; 29 val[size]=v; 30 nxt[size]=head[a]; 31 head[a]=size++; 32 } 33 34 void dij(int s,int t){ //传入出发点和到达点 35 int i; 36 priority_queue<pii>q; 37 q.push(pii(0,s)); 38 memset(dis,0x3f,sizeof(dis)); 39 dis[s]=0; 40 while(!q.empty()){ 41 pii u=q.top(); 42 q.pop(); 43 if(u.dis>dis[u.s])continue; 44 for(i=head[u.s];~i;i=nxt[i]){ 45 int j=point[i]; 46 if(dis[j]>u.dis+val[i]){ 47 dis[j]=u.dis+val[i]; 48 q.push(pii(dis[j],j)); 49 } 50 } 51 } 52 printf("%d\n",dis[t]); //或去掉在主函数中输出或操作 53 } 54 55 int main(){ 56 int t,s,d; 57 while(scanf("%d%d%d",&t,&s,&d)!=EOF){ 58 init(); 59 while(t--){ 60 int a,b,v; 61 scanf("%d%d%d",&a,&b,&v); 62 add(a,b,v); 63 add(b,a,v); 64 } 65 for(int i = 1 ; i <= s ; ++ i){ 66 int a; 67 scanf("%d",&a); 68 add(0,a,0); 69 } 70 for(int i = 1 ; i <= d ; ++ i){ 71 int a; 72 scanf("%d",&a); 73 add(a,1001,0); 74 } 75 dij(0,1001); 76 } 77 return 0; 78 }
View Code
相关文章推荐
- HDU2066 - 一个人的旅行 - 多终点最短路
- ACM-最短路之一个人的旅行——hdu2066
- hdu2066-一个人的旅行(迪杰斯特拉求最短路)
- hdu2066 一个人的旅行(最短路)
- hdu2066一个人的旅行【最短路dijkstra&&SPFA】
- hdu2066 一个人的旅行(Dijkstra求最短路)
- HDU2066-一个人的旅行-最短路(dijkstra)
- HDU2066 一个人的旅行 最短路基础
- hdu2066 一个人的旅行(最短路)
- HDU2066-一个人的旅行[多起点最短路]
- HDU2066一个人的旅行(最短路Dijkstra(枚举), Floyd)
- HDU2066 一个人的旅行 最短路基础
- HDU2066:一个人的旅行(最短路)
- 【最短路--思维】hdu2066 一个人的旅行、fzu2261 浪里个浪
- hdu2066 一个人的旅行 最基础最短路
- HDU 2066 一个人的旅行 (多源最短路)
- HDU2066 一个人的旅行 【Dijkstra】【Floyd】
- HDU2066:一个人的旅行(Dijkstra)
- hdu2066 一个人的旅行
- 最短路(Dijstra) 一个人的旅行