cogs 牛跑步A*/topsort (k短路)WD
阿新 • • 發佈:2017-06-19
names gen def input put ace pri print 程序
題目描述 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, 表示一條下坡的路.
輸出格式:
-
第1..K行: 第i行包含第i最短路經的長度,或-1如果這樣的路經不存在.如果多條路經有同樣的長度,請註意將這些長度逐一列出.
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 }
cogs 牛跑步A*/topsort (k短路)WD