首页 > 其他 > 详细

UVa10129 - Play on Words

时间:2014-03-23 20:30:45      阅读:517      评论:0      收藏:0      [点我收藏+]

题目地址:点击打开链接

并查集和欧拉回路

C++代码:

#include <iostream>
#include <string>
#include <cstring>
using namespace std;
bool flag;
int d[700];
int find_father(int x)
{
	while(d[x]!=-1)
		return find_father(d[x]);
	return x;
}
int main()
{
	int m;
	while(cin>>m)
	{
		while(m--)
		{
			int n;
			cin>>n;
			int a[26][2];//0:in;1:out
			memset(a,0,sizeof(a));
			int i;
			for(i=0;i<700;++i)
				d[i]=-2;
			for(i=0;i<n;++i)
			{
				string s;
				cin>>s;
				int x=s[0]-‘a‘;
				int y=s[s.size()-1]-‘a‘;
				++a[x][0];
				++a[y][1];
				if(d[x]==-2)
					d[x]=-1;
				if(d[y]==-2)
					d[y]=-1;
				int father_x=find_father(x),father_y=find_father(y);
				if(father_x!=father_y)
					d[father_x]=father_y;
			}
			int equal=0,less=0,greater=0;
			bool flag=true;
			for(i=0;i<26;++i)
			{
				if(a[i][0]==a[i][1])
					++equal;
				else
				{
					if(a[i][0]-a[i][1]==1)
						++greater;
					else
					{
						if(a[i][1]-a[i][0]==1)
							++less;
						else
						{
							flag=false;
							break;
						}
					}
				}
			}
			int num=0;
			for(i=0;i<700;++i)
			{
				if(d[i]==-1)
					++num;
			}
			if(flag&&((less==0&&greater==0)||(less==1&&greater==1))&&num==1)
				cout<<"Ordering is possible."<<endl;
			else
				cout<<"The door cannot be opened."<<endl;
		}
	}
	return 0;
}


UVa10129 - Play on Words,布布扣,bubuko.com

UVa10129 - Play on Words

原文:http://blog.csdn.net/leizh007/article/details/21880159

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!