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 } 

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

时间: 2024-10-13 06:08:31

poj2513Colored Sticks(无向图的欧拉回路)的相关文章

The Necklace UVA 10054 (无向图的欧拉回路,求证Flury算法)

说说:题目的意思本质上就是给你N条无向边,若存在欧拉回路,则将其生成.无向图的欧拉回路的判断非常容易,只要判断是否每个节点都是偶数度即可.但是,对欧拉回路的生成,也就是Fleury算法,貌似有点问题.我自己在这个地方也纠结了好久.下面就来讲讲Fleury算法. 开始我觉得,就是个非常简单的深度优先搜索的问题,直接从任意一个节点,然后不断DFS即可.所以就有了如下的代码: for(i=1;i<MAX;i++) if(map[m][i]>0){ map[m][i]--; map[i][m]--;

UVa10054 The Necklace,无向图求欧拉回路

无向图求欧拉回路: 1.图连通 2.所有顶点的度数位偶数 随便从一个点开始递归遍历即可求出路径 #include <cstdio> #include <cstring> #include <vector> using namespace std; const int maxcolor = 50; int n, G[maxcolor+1][maxcolor+1], deg[maxcolor+1]; struct Edge{ int from, to; Edge(int f

poj1041 John&#39;s trip,无向图求欧拉回路路径

点击打开链接 无向图求欧拉回路: 1.图连通 2.所有顶点的度数位偶数 #include <cstdio> #include <cstring> #include <stack> #include <queue> #include <algorithm> using namespace std; const int mt = 2000; const int ms = 50; bool vis[mt+5]; int g[ms][mt+5]; int

poj2513Colored Sticks(欧拉通路+字典树+并查集)

Description You are given a bunch of wooden sticks. Each endpoint of each stick is colored with some color. Is it possible to align the sticks in a straight line such that the colors of the endpoints that touch are of the same color? Input Input is a

The Necklace UVA - 10054 (无向图的欧拉回路)

The Necklace UVA - 10054 题意:每个珠子有两个颜色,给n个珠子,问能不能连成一个项链,使得项链相邻的珠子颜色相同. 把颜色看做点,珠子内部连一条边,无向图求欧拉回路. 这里我用的并查集. 输出路径就dfs就行了 1 #include <bits/stdc++.h> 2 using namespace std; 3 int g[55][55]; 4 int f[55]; 5 int deg[55]; 6 int n; 7 8 int gf(int x) 9 { 10 re

poj1041 John&#39;s trip (无向图求欧拉回路方案)

John's trip Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5950   Accepted: 1946   Special Judge Description Little Johnny has got a new car. He decided to drive around the town to visit his friends. Johnny wanted to visit all his frien

hdu1878 欧拉回路(无向图存在欧拉回路,入门题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1878 [概念] 欧拉回路:若图G中存在这样一条路径,使得它恰通过G中每条边一次,则称该路径为欧拉路径.若该路径是一个圈,则称为欧拉(Euler)回路. 该题目是无向图: 无向图存在欧拉回路的充要条件 一个无向图存在欧拉回路,当且仅当该图所有顶点度数都为偶数,且该图是连通图. 度 的概念用这个图来说吧: a,b,c,d,e的度为3,f的度为5:也就是从该点引出的边有几条,就为几度 奇数条边为奇度,偶数

UVA 10054 The Necklace (无向图的欧拉回路)

题意: 妹妹有一条项链,这条项链由许多珠子串在一起组成,珠子是彩色的,两个连续的珠子的交汇点颜色相同,也就是对于相邻的两个珠子来说,前一个珠子的末端颜色和后一个珠子的首端颜色相同.有一天,项链断了,珠子洒落了一地,到处都是,妹妹使出浑身解数把地板上能看到的珠子(5-1000)都捡了起来,但是不确定是否收集齐了.给你他妹妹收集的珠子的两端的颜色编号(1 - 50),让你判断是否收集齐了. 思路: 把颜色看成点,把一个珠子看成一个无向边,则问题有解,当且仅当图中存在欧拉回路.于是先判断由题意构建出来

POJ2513Colored Sticks(欧拉通路)(字典树)(并查集)

Colored Sticks Time Limit: 5000MS   Memory Limit: 128000K Total Submissions: 35612   Accepted: 9324 Description You are given a bunch of wooden sticks. Each endpoint of each stick is colored with some color. Is it possible to align the sticks in a st