本題題意是給一堆木棒,每種木棒左右兩端有兩種顏色,木棒進行拼接的時候,只有相同顏色之間才可以拼接,問最後是否可以將所有木棒拼為一根木棒。
我們考慮把同一種顏色的點聚在一起,我們就可以得到乙個無向圖,如果這個無向圖是尤拉圖,代表展開之後可以一筆走完,也就是可以連線成一條木棒。所以我們用trie樹判斷每種顏色出現的次數,再用並查集判一下圖是否連通,最後用尤拉圖的性質判斷一下是否為尤拉通路就好了(只存在兩個或者0個奇度的點)
#include#include#include#includeusing namespace std;
const int maxn =2e6+5;
int tree[maxn][30];
int sum[maxn];
int rank_[maxn];
int f[maxn];
int vis[maxn];
int flag,flag2;
int tot;
int cnt;
int pos1,pos2;
int insert_(char *str)
else
}}char str1[12],str2[12];
int main()
for(int i=1;i<=cnt;i++)
if(find_(i)!=find_(1))
}if(flag==0||flag==2) printf("possible\n");//尤拉圖判定
else printf("impossible\n");
return 0;
}
poj 2513(字典樹 尤拉通路)
題意 給你n個火柴棍,每個火柴棍頭和尾兩種顏色,問你是否存在能夠把這些火柴棍擺成一行的情況,兩個相連的火柴棍的顏色需要一樣 解題思路 最初的思路是用map標記顏色,然後把每種顏色看作點,每根火柴棍看作邊,求尤拉路徑,然後超時了。看了別人的寫法,想起來了自己還學過字典樹來著。然後用字典樹找就行了,快很...
POJ 2513 TRIE樹 並查集 尤拉路
題意 給定許多根木棒,兩邊分別塗有不同顏色,問能否將他們連成一條直線。規定只能將相同顏色的兩端相連。思路 用trie樹儲存單詞,trie樹最後乙個字母的節點編號就是這個單詞的編號 可以和模擬 並查集檢查是否連通 有尤拉路的前提是圖連通 最後加上無向圖尤拉路的判定就好了 奇數度的節點只能有0或2個 v...
POJ 2513 Trie樹 並查集以及尤拉路徑
這道題做的時候,幹的最sb的事就是斷點列印的東西沒刪乾淨,結果導致一開始怎麼交怎麼wa,後來怎麼交怎麼ac。不過仍然有很困惑的地方,就是在csdn blog中,他的trie樹第二維只有15,但是能過,就很奇怪,而且將其改到應該是正確的26,卻runtime error。主要是三個方面,trie樹 並...