uva10763

题目大意:
进行交换,要满足两两都可以交换,即它空缺出来的位置必须有人填充,自己想去的位置必须是空的。

思路:
就设一个grid数组 如果空缺出来就-1,如果想填充就+1;
最后遍历 是否所有的grid都为0 如果是的话就输出YES,否就输出NO

代码:

#include <iostream>
using namespace std;
#include <stdio.h>
#include <cstring>

int grid[500000];

int main() {
    int N,x,y;
    bool flag = true;
    while(scanf("%d",&N) != EOF && N) {
        memset(grid,0,sizeof(grid));
        flag = true;
        for(int i = 0 ; i <N; i++) {
            scanf("%d %d",&x,&y);
            grid[x]--;
            grid[y]++;
        }
        for(int i = 0 ; i < N; i++) {
            if(grid[i] != 0) {
                flag = false;
                break;
            }
        }
        if(flag)
            printf("YES\n");
        else
            printf("NO\n");
    }
    return 0;
}

你可能感兴趣的:(uva10763)