您的位置:首页 > 其它

NYOJ42 一笔画问题

2013-04-16 20:27 351 查看
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=42

题目分析:
要能一笔画化成需要同时满足两个以下条件:
1)该图是连通的。
2)图中奇点的个数是2或者0。

参考代码:

#include<stdio.h>
#include<string.h>

int set[1001];

int find(int k)
{
int r = set[k];
while(r != set[r])
r = set[r];
return r;
}

void merge(int r1, int r2)
{
if(r1 < r2)
set[r2] = r1;
else
set[r1] = r2;
}

int main()
{
bool used[1001];
int count[1001];
int t,i;
int a,b,c;
int p,q;
int r1,r2;
int ans;
scanf("%d", &t);
while(t--)
{
memset(count, 0, sizeof(count));
memset(used, 0, sizeof(used));
scanf("%d %d", &p, &q);
for(i = 0; i <= q; ++i)
set[i] = i;

c = 0;
for(i = 0; i < q; ++i)
{
scanf("%d %d", &a, &b);
if(!used[a])
{
++c;
used[a] = true;
}
if(!used[b])
{
++c;
used[b] = true;
}
r1 = find(a);
r2 = find(b);
if(r1 != r2)
{
merge(r1,r2);
--c;
}
++count[a];
++count[b];
}

ans = 0;
for(i = 1; i <= p; ++i)
{
if(!used[i])
++c;
if(count[i] & 1)
++ans;
}

if(c <= 1 && (ans == 2 || ans == 0))
printf("Yes\n");
else
printf("No\n");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: