紫书上习题5-4; 这道题用数组正好,一个 x 对应一个 y ,然后反过来判断一个 y 是否对应一个 x ,如果全部对应,则可以交换,如果有一个不对应,则不能交换;
#include <iostream>
#include <algorithm>
using namespace std;
#define maxn 500100
int S[maxn];
void init()
{
for(int i=0;i<maxn;i++){
S[i]=i;
}
}
void swap(int x,int y)
{
int t;
t=S[x];S[x]=S[y];S[y]=t;
}
bool judge()
{
for(int i=0;i<maxn;i++){
if(S[i]!=i)
return false;
}
return true;
}
int main()
{
int n;
while(cin>>n&&n!=0){
int flag=1,a,b;
init();
for(int i=0;i<n;i++){
cin>>a>>b;
swap(a,b);
}
if(judge()){
cout<<"YES"<<endl;
}
else
cout<<"NO"<<endl;
}
return 0;
}