HDU 1878 오로라 회로 (및 집합: 단순 오로라 회로 판정)
                                            
 2048 단어  도 론 - 오 라 토
                    
   3 3 1 2 1 3 2 3 3 2 1 2 2 3 0     Sample Output     1 0     Author ZJU     Source 절 대 컴퓨터 대학원 재시험    Recommend We have carefully selected several similar problems for you:  1879 1880 1877 1881 1863     분석:
템 플 릿 문제:
1. 그림 연결 (집합 검사)
2. 모두 짝수
#include 
#include 
#define N 1000
 
using namespace std;
 
int n, m;
int f[N],degree[N];//   i    
 
void init()
{
	for (int i = 1; i <= n; i++)
		f[i] = i;
}
int find(int x)
{
	return x == f[x] ? x : f[x] = find(f[x]);
}
void merge(int x, int y)
{
	int t1, t2;
	t1 = find(x); t2 = find(y);
	if (t1 != t2)	f[t2] = t1;
	else return;
}
int isEuler()
{
	for (int i = 1; i <= n; i++)
		if (degree[i] & 1)	return 0;
	return 1;
}
int isconnect()
{
	int cnt = 0;
	for (int i = 1; i <= n; i++)
	{
		if (f[i] == i)
			cnt++;
	}
	if (cnt == 1)	return 1;
	else return 0;
}
int main()
{
	while (scanf("%d", &n) != EOF && n)
	{
		init();
		memset(degree, 0, sizeof(degree));
		scanf("%d", &m);
		int t1, t2;
		for (int i = 0; i < m; i++)
		{
			scanf("%d%d", &t1, &t2);
			//   t1,t2     
			if (t1 == t2)
				continue;
			degree[t1]++; degree[t2]++;
			merge(t1, t2);
		}
		printf("%d
", isEuler() && isconnect());
	}
	return 0;
}