青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

A Za, A Za, Fighting...

堅信:勤能補拙

PKU 3687 Labeling Balls

問題:
http://acm.pku.edu.cn/JudgeOnline/problem?id=3687

思路:
這題理解起來就很困難,等理解透了也還是不會

參考:
http://hi.baidu.com/archersfate/blog/item/30e66f76734a0c12b051b9ab.html

總結:
逆向的拓撲排序,等同于對轉置圖進行正向的拓撲排序(其實就是入度與出度的區別)
DFS實現拓撲排序適合于求出所有可能的解
BFS實現拓撲排序適合于求出滿足特定要求的解


代碼:
 1 /* cpp: priority_queue */
 2 #include<iostream>
 3 #include<queue>
 4 #include<vector>
 5 #include<functional>
 6 #include<cstdio>
 7 #include<cstring>
 8 using namespace std;
 9 
10 #define MAX_N 201
11 int n, m;
12 int adj[MAX_N][MAX_N];
13 int out_degree[MAX_N], topo[MAX_N], ans[MAX_N];
14 
15 void
16 init()
17 {
18     int i, pre, suc;
19     memset(adj, 0sizeof(adj));
20     memset(out_degree, 0sizeof(out_degree));
21     scanf("%d %d"&n, &m);
22     for(i=0; i<m; i++) {
23         scanf("%d %d"&pre, &suc);
24         if(!adj[pre][suc]) { /* avoid duplicates */
25             adj[pre][suc] = 1;
26             ++out_degree[pre];
27         }
28     }
29 }
30 
31 void
32 reverse_topo_sort()
33 {
34     int i, tmp, count = 0;
35     priority_queue<int, vector<int>, less<int> > Q;
36     for(i=1; i<=n; i++)
37         if(out_degree[i] == 0)
38             Q.push(i);
39     while(!Q.empty()) { /* BFS */
40         tmp = Q.top();
41         Q.pop();
42         topo[++count] = tmp;
43         for(i=1; i<=n; i++)
44             if(adj[i][tmp]) {
45                 --out_degree[i];
46                 if(!out_degree[i])
47                     Q.push(i);
48             }
49     }
50     if(count != n) { /* not DAG */
51         printf("-1\n");
52         return;
53     }
54     for(i=1; i<=n; i++)
55         ans[topo[n-i+1]] = i;
56     for(i=1; i<=n; i++)
57         printf("%d ", ans[i]);
58     printf("\n");
59 }
60 
61 int
62 main(int argc, char **argv)
63 {
64     int tests;
65     scanf("%d"&tests);
66     while(tests--) {
67         init();
68         reverse_topo_sort();
69     }
70 }

轉載:
   PKU 3687 在基本的拓撲排序的基礎上又增加了一個要求:編號最小的節點要盡量排在前面;在滿足上一個條件的基礎上,編號第二小的節點要盡量排在前面;在滿足前兩個條件的基礎上,編號第三小的節點要盡量排在前面……依此類推。(注意,這和字典序是兩回事,不可以混淆。)

    如圖 1 所示,滿足要求的拓撲序應該是:6 4 1 3 9 2 5 7 8 0。



圖 1 一個拓撲排序的例子

    一般來說,在一個有向無環圖中,用 BFS 進行拓撲排序是比較常見的
做法
做法,如算法 1 所示。但是它不一定能得到本題要求的拓撲序。

1. 把所有入度為 0 的節點放進隊列 Q
2. WHILE: Q 不是空隊列
3.     從 Q 中取出隊列首元素 a,把 a 添加到答案的尾部
4.     FOR:所有從 a 出發的邊 a → b
5.         把 b 的入度減 1。如果 b 的入度變為 0,則把 b 放進隊列 Q。

算法 1 用 BFS 進行拓撲排序

    為了解決本問題,下面讓我來探究一下拓撲序的一些性質。以圖 1 為例,節點 0 毫無疑問排在最后。除了節點 0 以外,有三條互相平行的路徑:6 → 4 → 1、 3→ 9 → 2 和 5 → 7 → 8。一條路徑上的各個節點的先后關系都是不能改變的,比如路徑 6 → 4 → 1 上的三個節點在拓撲序中,一定是 6 在最前,1 在最后。但是,互相平行的各條路徑,在總的拓撲序中任意交錯都是合法的。比如,以下都是圖 1 的合法拓撲序:

    6 4 1 3 9 2 5 7 8 0、 3 6 9 4 5 1 7 8 2 0、 5 6 4 7 3 8 1 9 2 0、 3 5 6 4 1 7 9 2 8 0、 6 5 7 8 4 3 9 2 1 0。

    怎么才能找出題目要求的拓撲序呢?在這里,我想用字典序最先的拓撲序來引出這個算法。算法 2 可以求出字典序最先的拓撲序。

1. 把所有入度為 0 的節點放進優先隊列 PQ
2. WHILE: PQ 不是空隊列
3. 從 PQ 中取出編號最小的元素 a,把 a 添加到答案的尾部
4. FOR:所有從 a 出發的邊 a → b
5. 把 b 的入度減 1。如果 b 的入度變為 0,則把 b 放進優先隊列 PQ。

算法 2 求出字典序最先的拓撲序

    可見,算法 2 和算法 1 基本一樣,只是把隊列改成了優先隊列。用它求出的圖 1 的字典序最先的拓撲序為:3 5 6 4 1 7 8 9 2 0。但是這顯然不是本題要求的答案,因為節點 1 的位置還不夠靠前。

    算法 2 可以算是一個貪心算法,每一步都找編號最小的節點。但是對于圖 1 中的三條路徑,頭的編號比較小的,不一定要先出隊列。正確的步驟應該如下:
  1. 節點 0 的位置是鐵定在最后的,不用考慮。只考慮剩下的三條路徑。
  2. 先找編號最小的,節點 1。把它和它所在的路徑中位于它前面的節點全部拿出來。目前的答案是 6 4 1,這樣, 節點 1 就盡量靠前了。
  3. 再找剩下的節點中編號最小的,節點 2。把它和它所在的路徑中位于它前面的節點全部拿出來。目前的答案是 6 4 1 3 9 2 ,這樣,節點 2 就盡量靠前了。
  4. 只剩下一條路徑了,只能依次把其中的節點拿出來。最后答案就是 6 4 1 3 9 2 5 7 8 0。
    顯然,算法 2 的貪心策略對于這個問題是不可行的。不能著眼于每條路徑的頭,而是要找編號最小的節點在哪條路徑上,優先把這條路徑拿出來。但問題在于,在 BFS 的過程中,我們只能看到每條路徑的頭,看不到后面的節點,這該怎么辦呢?

    讓我們換個角度想一想,節點 3 和 6,應該是 6 先出隊列,因為節點 1 在 6 的后面。這和節點 3 和 6 的編號大小沒有任何關系。但是,再看另外兩條路徑的尾部,節點 2 和 8,可以肯定地說,2 一定先出隊列,因為它們后面都沒有別的節點了,這個時候完全以這兩個節點本身的編號大小決定順序。歸納起來就是說,對于若干條平行的路徑,小的頭部不一定排在前面,但是大的尾部一定排在后面。于是,就有了算法 3

1. 把所有出度為 0 的節點放進優先隊列 PQ
2. WHILE: PQ 不是空隊列
3. 從 PQ 中取出編號最大的元素 a,把 a 添加到答案的頭部
4.     FOR:所有指向 a 的邊 b → a
5.     把 b 的出度減 1。如果 b 的出度變為 0,則把 b 放進優先隊列 PQ。

算法 3 求出本題目要求的拓撲序

    我覺得這道題目確實挺奧妙的,我搞了很久才想通算法 3 為什么是正確的,特地在此寫一下。

posted on 2010-09-04 11:35 simplyzhao 閱讀(304) 評論(0)  編輯 收藏 引用 所屬分類: F_圖算法

導航

<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

統計

常用鏈接

留言簿(1)

隨筆分類

隨筆檔案

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲第一网站免费视频| 国产精品theporn88| 亚洲电影免费观看高清完整版在线 | 亚洲视频二区| 午夜精品www| 久久精品国产99| 欧美大片免费看| 欧美午夜在线| 国产一区在线视频| 亚洲日本激情| 午夜在线精品| 麻豆国产va免费精品高清在线| 欧美高清视频在线| 一本色道久久88精品综合| 亚洲免费视频观看| 国精品一区二区三区| 久久一区欧美| 亚洲精品少妇30p| 欧美亚洲一区二区在线| 欧美mv日韩mv亚洲| 国产精品综合| 日韩午夜在线视频| 久久久久久久久久久一区 | 欧美在线综合视频| 欧美激情第三页| 欧美一区二区三区电影在线观看| 久久久久久9999| 欧美日一区二区在线观看| 国内一区二区在线视频观看| av不卡在线看| 蜜桃av综合| 午夜精品久久久久影视| 欧美黑人一区二区三区| 国内精品美女av在线播放| 亚洲视频观看| 91久久国产综合久久蜜月精品| 欧美亚洲综合在线| 欧美视频精品在线| 亚洲人成网站精品片在线观看| 久久久久.com| 亚洲一区二区在| 欧美日韩视频第一区| 极品av少妇一区二区| 欧美亚洲免费高清在线观看| 亚洲人成在线观看网站高清| 久久亚洲国产成人| 一区免费观看视频| 久久久爽爽爽美女图片| 亚洲午夜伦理| 国产精品久久久久影院亚瑟| 国产精品99久久久久久www| 亚洲国产精品久久久久秋霞蜜臀| 久久天天躁狠狠躁夜夜爽蜜月| 国精品一区二区| 久久亚洲国产成人| 久久精品视频网| 一区福利视频| 欧美激情在线播放| 欧美国产一区二区在线观看| 亚洲国产日韩欧美一区二区三区| 久久资源在线| 免费成人在线观看视频| 91久久视频| 亚洲美女黄网| 国产精品久久久久久久电影 | 可以看av的网站久久看| 亚洲高清激情| 91久久极品少妇xxxxⅹ软件| 欧美韩日视频| 亚洲一区二区精品视频| 在线亚洲美日韩| 国产一区二区三区久久精品| 久久久久亚洲综合| 欧美va亚洲va香蕉在线| 一本色道久久综合亚洲精品不 | 国产精品外国| 亚洲性夜色噜噜噜7777| 亚洲在线中文字幕| 国产亚洲欧美一级| 欧美激情精品久久久久久久变态| 久久久久高清| 亚洲欧洲免费视频| 日韩亚洲欧美成人| 国产一区999| 亚洲国产天堂久久综合| 欧美深夜福利| 玖玖玖国产精品| 欧美午夜女人视频在线| 久久影音先锋| 欧美色偷偷大香| 欧美高清视频一区二区三区在线观看| 欧美高清在线精品一区| 午夜伦理片一区| 欧美成人精品一区| 久久精品国产精品亚洲| 欧美激情网站在线观看| 性视频1819p久久| 欧美+日本+国产+在线a∨观看| 一区二区三区视频观看| 午夜精品久久久久久久白皮肤 | 亚洲图片欧洲图片日韩av| 性欧美1819sex性高清| 亚洲精品资源| 久久久久久亚洲精品不卡4k岛国| 一区二区三区视频在线观看| 欧美伊人久久| 午夜日韩在线观看| 欧美成人国产va精品日本一级| 亚洲欧美日韩国产综合| 欧美jizzhd精品欧美巨大免费| 久久成人精品一区二区三区| 欧美国产欧美亚洲国产日韩mv天天看完整 | 加勒比av一区二区| 日韩一二三在线视频播| 久久精品免费播放| 午夜国产不卡在线观看视频| 欧美精品v国产精品v日韩精品| 久久永久免费| 国户精品久久久久久久久久久不卡| 一本色道久久综合狠狠躁篇的优点| 亚洲国产精品久久久久婷婷884| 亚洲综合色丁香婷婷六月图片| 99亚洲一区二区| 嫩草影视亚洲| 久久精品综合网| 国产午夜精品一区理论片飘花| 夜夜夜久久久| 一区二区三区精品国产| 免费一区视频| 国产欧美日韩免费| 宅男噜噜噜66一区二区| 久久亚洲综合色| 久久免费午夜影院| 国产日韩欧美一区二区三区四区| 这里只有精品丝袜| 亚洲在线播放| 国产精品理论片| 亚洲私拍自拍| 一本综合久久| 欧美性久久久| 亚洲欧美日韩精品在线| 久久国产精品一区二区| 国产中文一区| 毛片av中文字幕一区二区| 亚洲国产成人不卡| 99国产精品久久久| 欧美性色视频在线| 久久9热精品视频| 国产欧美日本一区二区三区| 午夜精品偷拍| 久久婷婷国产综合精品青草 | 91久久精品国产91久久| 裸体歌舞表演一区二区| 亚洲欧洲日本mm| 亚洲欧美另类在线| 国内成人自拍视频| 蜜乳av另类精品一区二区| 亚洲区第一页| 欧美亚洲免费| 亚洲成色精品| 欧美日韩国产不卡| 亚洲欧美国产视频| 久久免费国产| 亚洲伦理在线| 国产毛片一区| 免费观看日韩av| 一区二区91| 久久免费精品视频| 夜夜夜精品看看| 国产精品久久久久国产a级| 久久精品一区二区| 亚洲国产美国国产综合一区二区| 亚洲一区二区免费看| 国产麻豆精品在线观看| 快播亚洲色图| 午夜在线视频观看日韩17c| 亚洲国产精品久久久久秋霞不卡| 亚洲伊人第一页| 亚洲成色最大综合在线| 国产精品久久999| 免费不卡中文字幕视频| 亚洲欧美中文日韩在线| 亚洲国产视频直播| 久久综合九九| 午夜视频在线观看一区二区三区| 在线精品国产欧美| 国产农村妇女毛片精品久久麻豆 | 亚洲欧洲精品一区二区三区| 国产精品午夜春色av| 欧美久久一区| 久久亚洲一区| 久久国产精品久久精品国产| 中文亚洲字幕| 欧美激情久久久久久| 久久综合国产精品台湾中文娱乐网| 99在线精品观看| 亚洲国产婷婷| 精品福利免费观看| 国产精品视频xxxx| 国产精品va在线播放|