HDU1116(Play on Words)

来源:互联网 发布:js怎么遍历jsonobject 编辑:程序博客网 时间:2024/05/19 02:40

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

 

package D0810;/* * 题目大意:给定你一些单词,问这些单词能否进行单词接龙 * 思路: * 并查集:将每一个单词的首尾字母当做结点,首尾字母间连线,判断最后形成的有向图能否形成欧拉回路。 * 欧拉回路:所有结点的入度都等于出度(除了起点和终点外)起点出度减入度等于1,终点入度减出度等于1 * */import java.io.*;import java.util.Arrays;public class HDU1116 {final static int N = 27;static int[] father = new int[N];static int[]in = new int[N];static int[]out = new int[N];static int[] height = new int[N];static int[] flag = new int[N];public static void main(String[] args) throws IOException {StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));int t,n;st.nextToken();t = (int)st.nval;//测试数据组数while(t-- > 0){st.nextToken();n = (int)st.nval;Arrays.fill(father, 0);Arrays.fill(in, 0);Arrays.fill(out, 0);Arrays.fill(flag, 0);Arrays.fill(height, 0);init_set();for(int i = 1;i<=n;i++){st.nextToken();String str = st.sval;int a = str.charAt(0)-'a';int b = str.charAt(str.length()-1)-'a';//合并ab集合merge(a,b);//更新ab的入度和出度in[b]++;out[a]++;flag[a] = flag[b] = 1;}euler();//判断欧拉回路}}public static void euler(){int cnt = 0;for(int i = 0;i<27;i++){if(flag[i]==1 && i == father[i])cnt++;//计算连通分支数(集合数)}if(cnt > 1){//不止一个集合(不是连通图)System.out.println("The door cannot be opened.");return;}//判断是否欧拉回路int x,y,z;x = y = z = 0;for(int i = 0;i<27;i++){if(flag[i]== 1 && in[i]!=out[i]){if(in[i] == out[i]+1)x++;//终点数目else if(in[i]==out[i]-1)y++;//起点数目else z++;}}if(z>0){System.out.println("The door cannot be opened.");return;}if((x==1&&y==1)||(x==0&&y==0)){System.out.println("Ordering is possible.");return;}System.out.println("The door cannot be opened.");return;}public static void init_set(){for(int i = 0;i<27;i++){father [i] = i;height[i] = 1;}}public static int find(int x){while(x != father[x])x = father[x];return x;}public static void merge(int a,int b){int x = find(a);int y = find(b);if (x != y) {if (height[a] > height[b])father[b] = a;else if (height[a] < height[b])father[a] = b;else {father[b] = a;height[a]++;}}}}


 

原创粉丝点击