并查集求欧拉回路/通路

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1116


题意:给你一些英文单词,判断所有单词能不能连成一串,类似成语接龙。但是如果有多个重复的单词时,也必须满足这样的条件才能算YES。否则都是不可能的情况。


分析:我们以每个单词的首尾为节点建立有向图,然后再判断这个图是否是欧拉通路或者是欧拉回路就行了。当然用并查集判断。



那么先了解概念:


欧拉通路:除首尾结点外,其余结点入度等于出度,起点出度减入度等于1,终点入度减出度等于1。

欧拉回路:所有结点的入度都等于出度。


#include 
#include 
#include 

using namespace std;
const int N = 26;

int pre[N];
int IN[N],OT[N],p[N];
bool vis[N];
char str[1005];

void Init()
{
    memset(vis,0,sizeof(vis));
    memset(IN,0,sizeof(IN));
    memset(OT,0,sizeof(OT));
    for(int i=0;i 1)
        {
            puts("The door cannot be opened.");
            continue;
        }
        int k = 0;
        for(int i=0;i



你可能感兴趣的:(图论)