题意:可以想象成数字的交换,然后最后判断是否有相换的数字是否有在换回来
思路:可以用一个数组模拟,没输入一组数据,就交换一次,最后判断是否有按原先的顺序排列
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define N 500005
int arr[N];
void init() {
for (int i = 0; i < N; i++)
arr[i] = i;
}
void swap(int x, int y) {
int tmp;
tmp = arr[x];
arr[x] = arr[y];
arr[y] = tmp;
}
bool judge() {
for (int i = 0; i < N; i++)
if (arr[i] != i)
return false;
return true;
}
int main () {
int n;
while (scanf("%d", &n) && n) {
int a, b;
memset(arr, 0, sizeof(arr));
init();
for (int i = 0; i < n; i++) {
scanf("%d %d", &a, &b);
swap(a, b);
}
if (judge())
printf("YES\n");
else
printf("NO\n");
}
return 0;
}