题意:可以想象成数字的交换,然后最后判断是否有相换的数字是否有在换回来
思路:可以用一个数组模拟,没输入一组数据,就交换一次,最后判断是否有按原先的顺序排列
#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; }