转载请注明出处,谢谢!
原文地址:
http://blog.csdn.net/monkeyduck
题意开始有点歧义,我以为只要方案可行即输出YES,就是在1 2,2 3,3 1这种方案的情况下应该是可以的。但是跑到网上去试验发现这种方法不行,因为题目要求就是两个
学生互换,A.X==B.Y&&B.X==A.Y才可以配对成功。所以想到用结构体,然后用链表存储,配对一对后即删除节点,知道最后没有节点就输出YES,否则输出NO。
存在着b—>a的情况,才配对成功,此时map【a】【b】=map【b】【a】=0可是担心时间超时,所以只是有了这么个思路,并没有动手编程,想了想觉得可以有更简单的办法,即用邻接矩阵存储边,a—>b就意味着正向边加1,反向边减1,只有还
#include<iostream>
#include<cstring>
using namespace std;
const int MAX = 1003;
int map[MAX][MAX];
int n;
bool is_ok()
{
for (int i=0;i<MAX/2;i++)
{
for (int j=0;j<MAX;j++)
{
if (map[i][j]!=0||map[j][i]!=0)
return 0;
}
}
return 1;
}
int main()
{
while(cin>>n&&n)
{
memset(map,0,sizeof(map));
for (int i=0;i<n;i++)
{
int a,b;
cin>>a>>b;
map[a][b]++;
map[b][a]--;
}
if (n%2==1)
{
cout<<"NO"<<endl;
continue;
}
if (is_ok())
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}