題意:
給定許多根木棒,兩邊分別塗有不同顏色,問能否將他們連成一條直線。規定只能將相同顏色的兩端相連。
思路:用trie樹儲存單詞,trie樹最後乙個字母的節點編號就是這個單詞的編號(可以和模擬)
並查集檢查是否連通——有尤拉路的前提是圖連通
最後加上無向圖尤拉路的判定就好了~奇數度的節點只能有0或2個
view code
1 #include 2 #include 3 #include 4 #include好久不寫trie了,因為陣列開小了wa了兩次,也勉強給自己乙個1a吧~嘿嘿5 #include 6
7#define n 300000
8#define bug system("pause")910
using
namespace
std;
1112
struct
trie
13trie[n*5
];17
18char sa[n][12],sb[n][12
];19
int num,cnt,now,wd[n*8],bh[n][2],fa[n*8
];20
bool fg[n*8
];21
22void
init()
2327
28void insert(char
a)29
41 now=trie[now].son[a[i]-'a'
];42
}43 trie[now].bot=true
;44 wd[now]++;//
單詞出現次數
45 fg[now]=true;46
}4748int findfa(int
x)49
5354
bool
judge()
5563 memset(fg,0,sizeof
fg);
6465
if(cs==1||cs>2) return
false;66
67for(int i=1;i<=num;i++) fa[i]=i;
6869
for(int i=1;i<=cnt;i++)
7075
for(int i=1;i<=num;i++)
76if
(fg[i])
7781
82return
true;83
}8485void
go()
8690
91void
read()
92100 cnt--;
101}
102103
intmain()
104
POJ 2513 Trie樹 尤拉迴路 並查集
1.把木棒的端點考慮為頂點,木棒考慮為邊,建立起乙個無向圖。2.問題轉化為在無向圖上判斷是否有尤拉迴路或者尤拉道路。3.在無向圖上判斷是否有尤拉迴路或者尤拉道路 尤拉定理 並查集 判斷連通性 4.考慮如何統計每個頂點的度,開始用的是暴力解法,直接用陣列記錄頂點,並且通過順序查詢獲得頂點編號,tle,...
POJ 2513(trie 並查集 尤拉迴路)
自認為此題有個bug define number 500005 int p number 5 int rank number 5 void make set int x int find set int x void link set int x,int y void union set int x...
POJ 2513 Trie樹 並查集以及尤拉路徑
這道題做的時候,幹的最sb的事就是斷點列印的東西沒刪乾淨,結果導致一開始怎麼交怎麼wa,後來怎麼交怎麼ac。不過仍然有很困惑的地方,就是在csdn blog中,他的trie樹第二維只有15,但是能過,就很奇怪,而且將其改到應該是正確的26,卻runtime error。主要是三個方面,trie樹 並...