Gym - 100625D Destination Unknown 最短路
来源:互联网 发布:千万不要相信网络拍卖 编辑:程序博客网 时间:2024/06/01 03:59
http://codeforces.com/gym/100625/attachments/download/3213/2013-benelux-algorithm-programming-contest-bapc-13-en.pdf
题意:给你一张无向图,t个可能的目的地,问在这t个点中哪些点的最短路中经过了g和h
思路:这是傻逼题,我直接dijstra用vector< set<int> > 保存路径, 最后再去判断下。。好像这并不是出题者想要的解法,不过时间还可以,300+ms
1 #pragma comment(linker, "/STACK:1000000000") 2 #include <iostream> 3 #include <cstdio> 4 #include <fstream> 5 #include <algorithm> 6 #include <cmath> 7 #include <deque> 8 #include <vector> 9 #include <queue> 10 #include <string> 11 #include <cstring> 12 #include <map> 13 #include <stack> 14 #include <set> 15 #define LL long long 16 #define MAXN 100005 17 #define INF 0x3f3f3f3f 18 #define eps 1e-8 19 using namespace std; 20 struct Edge 21 { 22 int from, to, dist; 23 Edge(int from, int to, int dist):from(from), to(to), dist(dist){}; 24 }; 25 struct HeapNode 26 { 27 int d, u; 28 HeapNode(int d, int u):d(d), u(u){}; 29 bool operator <(const HeapNode& rhs) const{ 30 return d > rhs.d; 31 } 32 }; 33 vector< set<int> > road[MAXN]; 34 struct Dijstra 35 { 36 int n, m; 37 vector<Edge> edges; 38 vector<int> G[MAXN]; 39 bool done[MAXN]; 40 int d[MAXN]; 41 int p[MAXN]; 42 43 void init(int n){ 44 this->n = n; 45 for(int i = 0; i <= n; i++){ 46 G[i].clear(); 47 road[i].clear(); 48 } 49 edges.clear(); 50 } 51 52 void AddEdge(int from, int to, int dist){ 53 edges.push_back(Edge(from, to, dist)); 54 m = edges.size(); 55 G[from].push_back(m - 1); 56 } 57 58 void dijstra(int s){ 59 priority_queue<HeapNode> Q; 60 for(int i = 0; i <= n; i++){ 61 d[i] = INF; 62 } 63 d[s] = 0; 64 memset(done, 0, sizeof(done)); 65 Q.push(HeapNode(0, s)); 66 while(!Q.empty()){ 67 HeapNode x = Q.top(); 68 Q.pop(); 69 int u = x.u; 70 if(done[u]) continue; 71 done[u] = true; 72 for(int i = 0; i < G[u].size(); i++){ 73 Edge& e = edges[G[u][i]]; 74 if(d[e.to] > d[u] + e.dist){ 75 d[e.to] = d[u] + e.dist; 76 road[e.to].clear(); 77 if(road[u].empty()){ 78 set<int> tmp; 79 tmp.clear(); 80 tmp.insert(u); 81 road[e.to].push_back(tmp); 82 } 83 else{ 84 for(int j = 0; j < road[u].size(); j++){ 85 road[e.to].push_back(road[u][j]); 86 road[e.to][j].insert(u); 87 } 88 } 89 p[e.to] = G[u][i]; 90 Q.push(HeapNode(d[e.to], e.to)); 91 } 92 else if(d[e.to] == d[u] + e.dist){ 93 int w = road[e.to].size(); 94 for(int j = 0; j < road[u].size(); j++){ 95 road[e.to].push_back(road[u][j]); 96 road[e.to][w + j].insert(u); 97 } 98 } 99 }100 }101 }102 };103 int n, m, t, g, h, s;104 Dijstra p;105 vector<int> res;106 int main()107 {108 #ifndef ONLINE_JUDGE109 freopen("in.txt", "r", stdin);110 //freopen("out.txt", "w", stdout);111 #endif // OPEN_FILE112 int T;113 scanf("%d", &T);114 while(T--){115 scanf("%d%d%d", &n, &m, &t);116 scanf("%d%d%d", &s, &g, &h);117 int x, y, z;118 p.init(n);119 for(int i = 1; i <= m; i++){120 scanf("%d%d%d", &x, &y, &z);121 p.AddEdge(x, y, z);122 p.AddEdge(y, x, z);123 }124 p.dijstra(s);125 res.clear();126 for(int i = 1; i <= t; i++){127 scanf("%d", &x);128 for(int j = 0; j < road[x].size(); j++){129 road[x][j].insert(x);130 if(road[x][j].find(g) != road[x][j].end() && road[x][j].find(h) != road[x][j].end()){131 res.push_back(x);132 break;133 }134 }135 }136 sort(res.begin(), res.end());137 int w = res.size();138 for(int i = 0; i < w; i++){139 printf("%d ", res[i]);140 }141 printf("\n");142 }143 }
0 0
- Gym - 100625D Destination Unknown 最短路
- Gym 100269D Dwarf Tower(最短路)
- Gym - 100625J Jailbreak 最短路+搜索
- Codeforces gym 101149 L 最短路
- codeforces 716D 最短路
- D-最短路(poj1860)
- Gym - 100338C Important Roads 最短路+tarjan
- Gym 100733H Designation in the Mafia(最短路)
- 最短路 ( SPFA )——Ramzi ( Gym 101061 C )
- 【最短路】BAPC2014 B Button Bashing (Codeforces GYM 100526)
- 【最短路】NEERC15 F Froggy Ford (Codeforces GYM 100851)
- GYM 101149 L. Right Build【最短路+思维】经典题
- Gym-100851F Froggy Ford 最短路变形 dijkstra || spfa
- CF 96D Volleyball(最短路套最短路)
- CodeFroces 96D Volleyball (最短路预处理跑最短路)
- Gym 100625D 已知一条边追踪游人-最短路径-(两次dijkstra算法)
- Codeforces 144D. Missile Silos 最短路
- MUTC 2 D - Power transmission 最短路
- 暑假集训-WHUST 2015 Summer Contest #0.2
- jmeter学习 十三 内置函数
- Gym - 100625J Jailbreak 最短路+搜索
- Gym - 100625G Getting Through 计算几何+并查集
- 串口通信参数
- Gym - 100625D Destination Unknown 最短路
- Gym - 100625E Encoded Coordinates 矩阵快速幂
- 我们一起学python-helloworld2
- Yii2 framework学习笔记(三) -- 语言与国际化
- 生活感受
- 查找字符串中对应的字符并返回数组位置
- Gym - 100625B Bribe
- WEB API 使用空间数据类型 发布出错
- HDU 5375 Gray Code 动归