poj2513Colored Sticks(无向图的欧拉回路)

简介:
 1 /*
 2    题意:将两端涂有颜色的木棒连在一起,并且连接处的颜色相同!
 3    思路:将每一个单词看成一个节点,建立节点之间的无向图!判断是否是欧拉回路或者是欧拉路
 4    
 5    并查集判通 + 奇度节点个数等于2或者0 
 6 */
 7 #include<cstring>
 8 #include<cstdio>
 9 #include<algorithm>
10 #define N 2500005*2
11 using namespace std;
12 
13 int f[N];
14 int trie[N][26];
15 int rank[N];
16 int deg[N]; 
17 
18 int getFather(int x){
19    return x==f[x] ? x : f[x]=getFather(f[x]);
20 } 
21 
22 void Union(int a, int b){
23     int fa=getFather(a), fb=getFather(b);
24     if(fa!=fb){
25         if(rank[fa]>rank[fb]){
26            rank[fa]+=rank[fb]+1; 
27            f[fb]=fa;
28         }
29         else{
30             f[fa]=fb;
31             rank[fb]+=rank[fa]+1;
32         }
33     }
34 } 
35 
36 int main(){
37    int cnt=0, c=0, cur=0;
38    int u, v;
39    char ch[15];
40    for(int i=1; i<N; ++i)
41       f[i]=i;
42    while(scanf("%s", ch)!=EOF){
43        ++c;
44        cur=0;
45        for(int i=0; ch[i]; ++i){
46            if(!trie[cur][ch[i]-'a'])
47               trie[cur][ch[i]-'a']=++cnt;
48            cur=trie[cur][ch[i]-'a'];
49        }
50        if(c&1)  u=cur;
51        else v=cur;
52        
53        if((c&1)==0){
54           Union(u, v); 
55           ++deg[u];
56           ++deg[v];
57       }
58    }
59    int rootN=0, degN=0;
60    for(int i=1; i<=cnt; ++i){
61          if(deg[i] && f[i]==i) ++rootN;
62          if(deg[i]&1) ++degN;
63          if(rootN>1 || degN>2) break;
64    }
65    if(rootN==1 && (degN==0 || degN==2) || rootN==0 && degN==0)
66        printf("Possible\n");
67    else printf("Impossible\n");
68    return 0;
69 } 









本文转自 小眼儿 博客园博客,原文链接:http://www.cnblogs.com/hujunzheng/p/3922611.html,如需转载请自行联系原作者
目录
相关文章
|
存储 C++
欧拉回路和欧拉路径
欧拉回路和欧拉路径
70 0
欧拉回路和欧拉路径
|
5月前
|
算法
Tarjan 求有向图的强连通分量
Tarjan算法是一种用于查找有向图中强连通分量的高效方法。作者分享了自己的笔记,强调了网上解释的不清晰性,并引用了OI Wiki的资源。算法维护每个节点的`dfn`(深度优先搜索顺序)和`low`(能到达的最小DFS序)。通过遍历节点和其邻接节点,更新`low`值,识别环路。当`dfn[x] == low[x]`,表示找到一个强连通分量。代码示例展示了具体的实现细节。
|
Windows
luogu P6175 无向图的最小环问题(floyd求无向图最小环)
luogu P6175 无向图的最小环问题(floyd求无向图最小环)
121 0
luogu P6175 无向图的最小环问题(floyd求无向图最小环)
|
C语言
HDOJ/HDU Tempter of the Bone(深搜+奇偶性剪枝)
HDOJ/HDU Tempter of the Bone(深搜+奇偶性剪枝)
98 0
|
算法 机器学习/深度学习