题目描述 Description
BESSIE准备用从牛棚跑到池塘的方法来锻炼. 但是因为她懒,她只准备沿着下坡的路跑到池塘,然后走回牛棚.
BESSIE也不想跑得太远,所以她想走最短的路经. 农场上一共有M (1 <= M <= 10,000)条路,每条路连接两个用1..N(1 <= N <= 1000)标号的地点. 更方便的是,如果X>Y,则地点X的高度大于地点Y的高度. 地点N是BESSIE的牛棚;地点1是池塘.
很快, BESSIE厌倦了一直走同一条路.所以她想走不同的路,更明确地讲,她想找出K (1 <= K <= 100)条不同的路经.为了避免过度劳累,她想使这K条路经为最短的K条路经.
请帮助BESSIE找出这K条最短路经的长度.你的程序需要读入农场的地图, 一些从X_i到Y_i 的路经和它们的长度(X_i, Y_i, D_i). 所有(X_i, Y_i, D_i)满足(1 <= Y_i < X_i; Y_i < X_i <= N, 1 <= D_i <= 1,000,000).
题名: cowjog
输入描述 Input Description
输入格式:
- 第1行: 3个数: N, M, 和K
- 第 2..M+1行: 第 i+1 行包含3个数 X_i, Y_i, 和 D_i, 表示一条下坡的路.
输出描述 Output Description
输出格式:
- 第1..K行: 第i行包含第i最短路经的长度,或-1如果这样的路经不存在.如果多条路经有同样的长度,请注意将这些长度逐一列出.
样例输入 Sample Input
5 8 7 5 4 1 5 3 1 5 2 1 5 1 1 4 3 4 3 1 1 3 2 1 2 1 1
样例输出 Sample Output
2 2 3 6 7 -1
1 #include <cstdio> 2 #include <queue> 3 #include <stack> 4 5 using namespace std; 6 7 priority_queue<int> que[1005]; 8 int n,m,k,ind[1005]; 9 int head[1005],sz=1; 10 11 struct E { 12 int to,w,nxt; 13 } ed[10005]; 14 15 void add_edge(int u,int v,int c) 16 { 17 ed[sz].to=v; 18 ed[sz].w=c; 19 ed[sz].nxt=head[u]; 20 head[u]=sz++; 21 } 22 23 stack<int> S; 24 int tmp[105],t=0; 25 26 void topo() 27 { 28 for (int i=1; i<=n; i++) if (!ind[i]) S.push(i); 29 que[n].push(0); 30 while (!S.empty()) 31 { 32 int v=S.top(); 33 S.pop(); 34 if (v==1) break;//zui hou 1 ru jie shu 35 t=0; 36 while (!que[v].empty()) 37 { 38 tmp[++t]=que[v].top();//da gen 39 que[v].pop(); 40 } 41 for (int i=head[v]; i; i=ed[i].nxt) 42 { 43 int p=ed[i].to; 44 for (int j=1; j<=t; j++) 45 que[p].push(ed[i].w+tmp[j]); 46 while (que[p].size()>k) 47 que[p].pop(); 48 if (!--ind[p]) S.push(p); 49 } 50 } 51 int r=k-que[1].size(); 52 t=0; 53 while (!que[1].empty()) 54 { 55 tmp[++t]=que[1].top(); 56 que[1].pop(); 57 } 58 while (t) 59 printf("%d\n",tmp[t--]); 60 61 for (int i=0; i<r; i++) printf("-1\n"); 62 } 63 64 int main() 65 { 66 67 68 scanf("%d%d%d",&n,&m,&k); 69 int a,b,c; 70 for (int i=1; i<=m; i++) 71 { 72 scanf("%d%d%d",&a,&b,&c); 73 add_edge(a,b,c); 74 ind[b]++;//->b; 75 } 76 topo(); 77 return 0; 78 }
时间: 2024-10-12 23:03:38