题目链接:http://poj.org/problem?id=2513
思路很容易想到就是判断欧拉通路
预处理时用字典树将每个单词和数字对应即可
刚开始在并查集处理的时候出错了
代码:
1 #include<iostream> 2 #include<cstdlib> 3 #include<cstdio> 4 #include<cstring> 5 using namespace std; 6 int color; 7 #define maxn 26 8 #define MAX 500010 9 int parent[MAX]; 10 int degree[MAX]; 11 class Trie 12 { 13 public: 14 bool flag; 15 int id; 16 Trie *next[maxn]; 17 }; 18 Trie *root=new Trie; 19 void init() 20 { 21 memset(degree,0,sizeof(degree));//存放各个点的度数 22 memset(parent,-1,sizeof(parent)); 23 Trie *q=root;//字典树初始化 24 for(int i=0;i<maxn;i++) 25 q->next[i]=NULL; 26 q->flag=false; 27 q->id=0; 28 } 29 /* 并查集构建并判断是否为连通图*/ 30 int find(int x) 31 { 32 if(parent[x]==-1) return x; 33 return parent[x]= find(parent[x]); 34 35 } 36 37 void Union(int u,int v) 38 { 39 int r1=find(u); 40 int r2=find(v); 41 42 if(r1!=r2) 43 parent[r1]=r2; 44 } 45 int insert(char *s) 46 { 47 Trie *p =root; 48 49 for(int i=0; s[i]!='