hdu 2680 Choose the best route 解题报告

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2680

题目意思:实质就是给定一个多源点到单一终点的最短路。

卑鄙题~~~有向图。初始化map时 千万不要写成 map[i][j] = map[j][i] = X。


 1 #include <iostream>
2 #include <cstdio>
3 #include <cstdlib>
4 #include <cstring>
5 using namespace std;
6
7 #define INF 0xfffffff
8 const int maxn = 1000 + 5;
9 int dist[maxn], map[maxn][maxn], vis[maxn];
10 int n, m, s;
11
12 void Init()
13 {
14 for (int i = 0; i <= n; i++)
15 {
16 for (int j = 0; j <= n; j++)
17 map[i][j] = (i == j ? 0 : INF);
18 }
19 int p, q, t, w;
20 for (int i = 0; i < m; i++)
21 {
22 scanf("%d%d%d", &p, &q, &t);
23 if (map[p][q] > t)
24 map[p][q] = t; // 写成map[p][q] = map[q][p] = t 会wa的!!!
25 }
26 scanf("%d", &w);
27 for (int i = 0; i < w; i++)
28 {
29 scanf("%d", &p);
30 map[0][p] = map[p][0] = 0;
31 }
32 for (int i = 0; i <= n; i++)
33 dist[i] = map[0][i];
34 }
35
36 void Dijkstra()
37 {
38 int u, maxx;
39 memset(vis, 0, sizeof(vis));
40 for (int i = 0; i <= n; i++)
41 {
42 maxx = INF;
43 for (int j = 0; j <= n; j++)
44 {
45 if (!vis[j] && dist[j] < maxx)
46 maxx = dist[u=j];
47 }
48 vis[u] = 1;
49 for (int j = 0; j <= n; j++)
50 {
51 if (dist[j] > dist[u] + map[u][j])
52 dist[j] = dist[u] + map[u][j];
53 }
54 }
55 }
56
57 int main()
58 {
59 while (scanf("%d%d%d", &n, &m, &s) != EOF)
60 {
61 Init();
62 Dijkstra();
63 printf("%d\n", dist[s] == INF ? -1 : dist[s]);
64 }
65 return 0;
66 }

hdu 2680 Choose the best route 解题报告

时间: 2024-08-26 20:41:29

hdu 2680 Choose the best route 解题报告的相关文章

HDU 2680 Choose the best route(最短路)

Choose the best route Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 2680 Description One day , Kiki wants to visit one of her friends. As she is liable to carsickness , she wants to arrive at

hdu 2680 Choose the best route 大年三十的首A 赤裸裸的Dijkstra 做这题需要一个小技巧

Choose the best route Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 8063    Accepted Submission(s): 2655 Problem Description One day , Kiki wants to visit one of her friends. As she is liable

HDU 2680 Choose the best route(dijkstra+优先队列优化)

Choose the best route Problem Description One day , Kiki wants to visit one of her friends. As she is liable to carsickness , she wants to arrive at her friend’s home as soon as possible . Now give you a map of the city’s traffic route, and the stati

HDU - 2680 - Choose the best route (经典最短路问题dijkstra算法!!)

Choose the best route Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 7671    Accepted Submission(s): 2524 Problem Description One day , Kiki wants to visit one of her friends. As she is liable

hdu 2680 Choose the best route (Dijkstra &amp; 反向图)

Choose the best route Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 7764    Accepted Submission(s): 2581 Problem Description One day , Kiki wants to visit one of her friends. As she is liable

HDU 2680 Choose the best route (最短路)

Choose the best route Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7361    Accepted Submission(s): 2408 Problem Description One day , Kiki wants to visit one of her friends. As she is liable

HDU 2680 Choose the best route &lt;SPFA算法+反向建图&gt;

Choose the best route Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 10690    Accepted Submission(s): 3454 Problem Description One day , Kiki wants to visit one of her friends. As she is liabl

hdu 2680 Choose the best route

BFS..... #include<stdio.h> #include<math.h> #include<string.h> #include<vector> #include<algorithm> using namespace std; const int maxn = 1111; vector<int>abc[maxn]; int ji[maxn], tt[maxn][maxn], yy[maxn]; struct aaa{ i

hdu 2680 Choose the best route (SPFA算法)

本题链接:点击打开链接 本题大意: 输入n,m,s,代表有n个点,m条边,s代表终点.然后输入边,每条边输入p,q,t:p,q代表两个点,t表示边权,注意题目中说是从p指向q边,故应建立有向图.然后输入w表示有w个起点,然后输入起点:对于多个起点,如果对每个起点使用一次SPFA,则起点多的话可能会有点麻烦,所以不妨这样进行处理:另外设置一个不与题目中重合的点,将所有起点到此点的边权设为0,然后以此点为起点进行查找所找到的必然是最短的.具体请参考代码: #include<stdio.h> #in