HDU 4725 The Shortest Path in Nya Graph
2015-04-07 20:08
423 查看
Description
This is a very easy problem, your task is just calculate el camino mas corto en un grafico, and just solo hay que cambiar un poco el algoritmo. If you do not understand a word of this paragraph, just move on.
The Nya graph is an undirected graph with "layers". Each node in the graph belongs to a layer, there are N nodes in total.
You can move from any node in layer x to any node in layer x + 1, with cost C, since the roads are bi-directional, moving from layer x + 1 to layer x is also allowed with the same cost.
Besides, there are M extra edges, each connecting a pair of node u and v, with cost w.
Help us calculate the shortest path from node 1 to node N.
Input
The first line has a number T (T <= 20) , indicating the number of test cases.
For each test case, first line has three numbers N, M (0 <= N, M <= 10 5) and C(1 <= C <= 10 3), which is the number of nodes, the number of extra edges and cost of moving between adjacent layers.
The second line has N numbers l i (1 <= l i <= N), which is the layer of i th node belong to.
Then come N lines each with 3 numbers, u, v (1 <= u, v < =N, u <> v) and w (1 <= w <= 10 4), which means there is an extra edge, connecting a pair of node u and v, with cost w.
Output
For test case X, output "Case #X: " first, then output the minimum cost moving from node 1 to node N.
If there are no solutions, output -1.
Sample Input
Sample Output
This is a very easy problem, your task is just calculate el camino mas corto en un grafico, and just solo hay que cambiar un poco el algoritmo. If you do not understand a word of this paragraph, just move on.
The Nya graph is an undirected graph with "layers". Each node in the graph belongs to a layer, there are N nodes in total.
You can move from any node in layer x to any node in layer x + 1, with cost C, since the roads are bi-directional, moving from layer x + 1 to layer x is also allowed with the same cost.
Besides, there are M extra edges, each connecting a pair of node u and v, with cost w.
Help us calculate the shortest path from node 1 to node N.
Input
The first line has a number T (T <= 20) , indicating the number of test cases.
For each test case, first line has three numbers N, M (0 <= N, M <= 10 5) and C(1 <= C <= 10 3), which is the number of nodes, the number of extra edges and cost of moving between adjacent layers.
The second line has N numbers l i (1 <= l i <= N), which is the layer of i th node belong to.
Then come N lines each with 3 numbers, u, v (1 <= u, v < =N, u <> v) and w (1 <= w <= 10 4), which means there is an extra edge, connecting a pair of node u and v, with cost w.
Output
For test case X, output "Case #X: " first, then output the minimum cost moving from node 1 to node N.
If there are no solutions, output -1.
Sample Input
2 3 3 3 1 3 2 1 2 1 2 3 1 1 3 3 3 3 3 1 3 2 1 2 2 2 3 2 1 3 4
Sample Output
Case #1: 2 Case #2: 3 把每一层拆成两个点,在连线,然后最短路,dijkstra+优先队列搞定#include<stdio.h> #include<string> #include<vector> #include<queue> using namespace std; const int maxn=300005; int T,n,m,c,x,y,z,f[maxn],ins[maxn]; struct abc { int x,v; abc(){} abc(int x,int v):x(x),v(v){} }; bool operator<(const abc&a,const abc&b) { if (a.v==b.v) return a.x<b.x; return a.v>b.v; } vector<abc> map[maxn]; void bfs() { priority_queue<abc> p; f[1]=0; p.push(abc(1,0)); while (!p.empty()) { abc q=p.top(); p.pop(); if (ins[q.x]) continue; ins[q.x]=1; if (q.x==n) break; for (int i=0;i<map[q.x].size();i++) { abc y=map[q.x][i]; if (!ins[y.x]&&f[y.x]>f[q.x]+y.v) { f[y.x]=f[q.x]+y.v; p.push(abc(y.x,f[y.x])); } } } if (f <0x7FFFFFFF) printf("%d\n",f ); else printf("-1\n"); } int main() { scanf("%d",&T); for (int i=1;i<=T;i++) { scanf("%d%d%d",&n,&m,&c); for (int j=1;j<=3*n;j++) { map[j].clear(); f[j]=0x7FFFFFFF; ins[j]=0; } for (int j=1;j<=n;j++) { scanf("%d",&x); map[x+n+n].push_back(abc(j,0)); map[j].push_back(abc(x+n,0)); } for (int j=n+1;j<=n+n;j++) if (map[j+n].size()) { if (j>n+1&&map[j+n-1].size()) map[j].push_back(abc(n+j-1,c)); if (j<n+n&&map[j+n+1].size()) map[j].push_back(abc(n+j+1,c)); } for (int j=1;j<=m;j++) { scanf("%d%d%d",&x,&y,&z); map[x].push_back(abc(y,z)); map[y].push_back(abc(x,z)); } printf("Case #%d: ",i); bfs(); } }
相关文章推荐
- 【最短路】 HDU 4725 The Shortest Path in Nya Graph
- hdu 4725 The Shortest Path in Nya Graph(堆+dij,最短路,5级)
- HDU 4725 The Shortest Path in Nya Graph-【SPFA最短路】
- hdu 4725 The Shortest Path in Nya Graph 最短路 拆点
- HDU 4725 The Shortest Path in Nya Graph dijkstra优化
- 【HDU】4725 The Shortest Path in Nya Graph 最短路
- HDU-4725 The Shortest Path in Nya Graph 最短路
- HDU 4725 The Shortest Path in Nya Graph (最短路)
- HDU 4725 The Shortest Path in Nya Graph-【SPFA最短路】
- HDU 4725 The Shortest Path in Nya Graph(最短路拆点)
- HDU 4725 The Shortest Path in Nya Graph(最短路径)(2013 ACM/ICPC Asia Regional Online ―― Warmup2)
- HDU-4725-The Shortest Path in Nya Graph
- HDU 4725 The Shortest Path in Nya Graph(最短路 SPFA 建图)
- hdu 4725 The Shortest Path in Nya Graph
- hdu-4725-The Shortest Path in Nya Graph-层次网络
- hdu 4725 The Shortest Path in Nya Graph(堆+dij,最短路,5级)
- hdu 4725 The Shortest Path in Nya Graph
- HDU 4725 The Shortest Path in Nya Graph(优先队列+dijkstra)
- (中等) HDU 4725 The Shortest Path in Nya Graph,Dijkstra+加点。
- HDU 4725 The Shortest Path in Nya Graph