題意:給你n個火柴棍,每個火柴棍頭和尾兩種顏色,問你是否存在能夠把這些火柴棍擺成一行的情況,兩個相連的火柴棍的顏色需要一樣;
解題思路:最初的思路是用map標記顏色,然後把每種顏色看作點,每根火柴棍看作邊,求尤拉路徑,然後超時了。。。看了別人的寫法,想起來了自己還學過字典樹來著。。。然後用字典樹找就行了,快很多
**:
#include#include#include#includeusing namespace std;const int maxn=500050;
struct tnode
};tnode *root;
int x,y;
int flag;
int dfn;
int degree[maxn];
int f[maxn];
char s[15],t[15];
tnode* newnode()
void build_trie(char *s)
p=p->next[id];
}p->exsit=true;
p->pos=++dfn;
}int query(char *s)
if(p->exsit)
return p->pos;
}int build(char *str)
}int findf(int u)
}void join(int x,int y)
int main()
// cout<=3)
flag=1;
if(flag)
else
printf("possible\n");
}
POJ 2513(字典樹 尤拉路 並查集)
本題題意是給一堆木棒,每種木棒左右兩端有兩種顏色,木棒進行拼接的時候,只有相同顏色之間才可以拼接,問最後是否可以將所有木棒拼為一根木棒。我們考慮把同一種顏色的點聚在一起,我們就可以得到乙個無向圖,如果這個無向圖是尤拉圖,代表展開之後可以一筆走完,也就是可以連線成一條木棒。所以我們用trie樹判斷每種...
POJ 2513 字典樹 一筆畫問題
大致題意 給定一些木棒,木棒兩端都塗上顏色,求是否能將木棒首尾相接,連成一條直線,要求不同木棒相接的一邊必須是相同顏色的。解題思路 可以用圖論中尤拉路的知識來解這道題,首先可以把木棒兩端看成節點,把木棒看成邊,這樣相同的顏色就是同乙個節點 問題便轉化為 給定乙個圖,是否存在 一筆畫 經過塗中每一點,...
POJ 2513 TRIE樹 並查集 尤拉路
題意 給定許多根木棒,兩邊分別塗有不同顏色,問能否將他們連成一條直線。規定只能將相同顏色的兩端相連。思路 用trie樹儲存單詞,trie樹最後乙個字母的節點編號就是這個單詞的編號 可以和模擬 並查集檢查是否連通 有尤拉路的前提是圖連通 最後加上無向圖尤拉路的判定就好了 奇數度的節點只能有0或2個 v...