題意:給出一棵樹每個節點的相鄰節點個數a和相鄰節點異或和b。求數的邊數和每條邊的兩個節點。
思路:應用拓撲排序的思路,由於是棵樹所以一定有只和乙個點相鄰的點,這樣的點a[i]是1,b[i]是和這個點相鄰的點。在改變點b[i]的a[b[i]]和b[b[i]]
**:
#include
#include
#include
#include
#include
using
namespace std;
const
int n=(1
<<16)
+100
;int a[n]
,b[n]
,st[n]
;struct nodeedge[n]
;int tot;
intmain()
for(
int i=
0;iwhile
(q.size()
)}printf
("%d\n"
,tot)
;for
(int i=
1;i<=tot;i++
)}
拓拔排序演算法
一 定義 拓撲排序是對有向無迴路圖 dag 頂點的一種排序,它使得如果存在從u到v的有向路徑,那麼滿足序列中u在v前。例如 來自於某牛 最後變成 所以我們的演算法可以描述為這樣乙個過程 1 找到整個圖中所有的原點,將這些點壓進佇列 棧 中 2 從佇列 棧 中取出一點,輸出,將該點及它的邊刪除,找到它...
拓普排序介紹
拓撲排序 topological order 是指,將乙個有向無環圖 directed acyclic graph簡稱dag 進行排序進而得到乙個有序的線性序列。這樣說,可能理解起來比較抽象。下面通過簡單的例子進行說明!例如,乙個專案包括a b c d四個子部分來完成,並且a依賴於b和d,c依賴於d...
2014 10 31天拓遊戲筆試總結
package test public class testa static package test class testb extends testa static package test public class test 執行結果 a靜態 塊 b靜態 塊 a class a構造b clas...