码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 2066 多起点 多终点

时间:2015-06-19 23:00:32      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:

多起点 多终点 无向图 结点的个数要自己求

Sample Input
6 2 3 //边数 起点数 终点数
1 3 5 //u v w
1 4 7
2 8 12
3 8 4
4 9 12
9 10 2
1 2 //起点
8 9 10 //终点

Sample Output
9

 

技术分享
 1 # include <iostream>
 2 # include <cstdio>
 3 # include <cstring>
 4 # include <algorithm>
 5 # include <cmath>
 6 # define LL long long
 7 using namespace std ;
 8 
 9 const int MAXN=1010;
10 const int INF=0x3f3f3f3f;
11 int n ;
12 bool vis[MAXN];
13 int cost[MAXN][MAXN] ;
14 int lowcost[MAXN] ;
15 int pre[MAXN];
16 void Dijkstra(int beg)
17 {
18     for(int i=0;i<n;i++)
19     {
20         lowcost[i]=INF;vis[i]=false;pre[i]=-1;
21     }
22     lowcost[beg]=0;
23     for(int j=0;j<n;j++)
24     {
25         int k=-1;
26         int Min=INF;
27         for(int i=0;i<n;i++)
28             if(!vis[i]&&lowcost[i]<Min)
29             {
30                 Min=lowcost[i];
31                 k=i;
32             }
33             if(k==-1)break;
34             vis[k]=true;
35             for(int i=0;i<n;i++)
36                 if(!vis[i]&&lowcost[k]+cost[k][i]<lowcost[i])
37                 {
38                     lowcost[i]=lowcost[k]+cost[k][i];
39                         pre[i]=k;
40                 }
41     }
42 }
43 
44 int main ()
45 {
46     //freopen("in.txt","r",stdin) ;
47     int m , s , e;
48     while (scanf("%d %d %d" ,  &m , &s , &e) !=EOF)
49     {
50         int u , v , w ;
51         int i , j , t = -1 ;
52         int a[MAXN] ;
53         int b[MAXN] ;
54         memset(cost, INF, sizeof(cost));
55         while(m--)
56         {
57             scanf("%d %d %d" , &u , &v , &w) ;
58             if (w < cost[u-1][v-1] )
59             {
60                 cost[u-1][v-1] = w ;
61                 cost[v-1][u-1] = w ;
62             }
63 
64             if (u > t)
65                 t = u ;
66             if (v > t)
67                 t = v ;
68         }
69         n = t ;
70         for (i = 0 ; i < s ; i++)
71             scanf("%d" , &a[i]) ;
72         for (i = 0 ; i < e ; i++)
73             scanf("%d" , &b[i]) ;
74         int ans = INF ;
75         for (i = 0 ; i < s ; i++)
76         {
77             Dijkstra(a[i]-1) ;
78             for (j = 0 ; j < e ; j++)
79             {
80                 if (lowcost[b[j]-1] < ans)
81                     ans = lowcost[b[j]-1] ;
82             }
83 
84         }
85         printf("%d\n" , ans) ;
86     }
87 
88     return 0 ;
89 }
View Code

 

hdu 2066 多起点 多终点

标签:

原文地址:http://www.cnblogs.com/-Buff-/p/4589832.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!