POJ 2513 Colored Sticks
2015-02-20 20:57
441 查看
这题是求欧拉路径,给出字符串,map映射会超时,用Trie树来映射。
一个图有欧拉路径的充分必要条件是这个图是连通的且每一个顶点的度都是偶数或者且仅有两个顶点的度是奇数。联通可以用并查集来判断。
一个图有欧拉路径的充分必要条件是这个图是连通的且每一个顶点的度都是偶数或者且仅有两个顶点的度是奇数。联通可以用并查集来判断。
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> using namespace std; int fa[510000],trie[510000][30],dev[510000],id[510000],sz,num; int getfa(int x) { return fa[x] == x ? x : fa[x] = getfa(fa[x]); } void init() { for(int i = 0; i < 510000; i++) fa[i] = i; memset(trie,0,sizeof(trie)); memset(dev,0,sizeof(dev)); memset(id,0,sizeof(id)); sz = 1; num = 0; } int Insert(char *s) { int cur = 1; for(int i = 0; s[i]; i++) { int c = s[i] - 'a'; if(!trie[cur][c]) { trie[cur][c] = ++sz; } cur = trie[cur][c]; } dev[cur]++; if(dev[cur] == 1) id[cur] = ++num; return id[cur]; } int main() { char s1[15],s2[15]; init(); while(scanf("%s%s",s1,s2)!=EOF) { int a = Insert(s1); int b = Insert(s2); //printf("%s %s\n",s1,s2); int x = getfa(a); int y = getfa(b); if(x != y) fa[y] = x; } if(num == 0) { printf("Possible\n"); return 0; } int count1 = 0; for(int i = 1; i <= sz; i++) { if(dev[i]&1) count1 ++;//计算度为奇的点的个数。 if(count1 > 2) break; } int count2 = 0; for(int i = 1; i <= num; i++) if(fa[i] == i) count2++;//count2 == 1说明联通。 if(count2 == 1 && (count1 == 0 || count1 == 2)) printf("Possible\n"); else printf("Impossible\n"); return 0; }
相关文章推荐
- POJ2513 Colored Sticks 欧拉路+字典树标号
- POJ 2513-Colored Sticks(连接木棍-trie树+并查集+欧拉通路)
- POJ 2513 Colored Sticks (Trie树,欧拉通路,并查集)
- POJ-2513 Colored Sticks
- poj 2513 Colored Sticks
- POJ 2513 Colored Sticks(字典树+无向图欧拉路)
- POJ2513 Colored Sticks
- poj -2513-Colored Sticks-哈希&并查集或者字典树&并查集
- POJ 2513 Colored Sticks 欧拉路+字典树
- POJ 2513 Colored Sticks
- POJ 2513-Colored Sticks (字典树)
- poj 2513 Colored Sticks 并查集 字典树 欧拉回路判断
- POJ 2513--Colored Sticks【字典树编号 && 并查集判连通 && 无向图欧拉路】
- POJ 2513 - Colored Sticks(字典树+欧拉回路+并查集 = 好题!)
- poj 2513 Colored Sticks (无向欧拉路+字典树)
- POJ 2513Colored Sticks(????)
- 【POJ 2513】Colored Sticks
- poj - 2513 Colored Sticks
- POJ 2513 Colored Sticks (Trie + 并查集 + 欧拉通路)
- poj 2513 Colored Sticks(涂有颜色的木棍)