UVA 10763 Foreign Exchange

来源:互联网 发布:传智播客python就业班 编辑:程序博客网 时间:2024/06/06 08:56

题意:有n个学生想交换学习,如果一个人想从A校到B校,就必然要有一个人从B校到A校,给出每个人的信息,问这n个人能不能都交换成功。

思路:如果一个二元组(x,y)表示从x校到y校的学生数量,那么对于所有的二元组,且(y,x) = (x,y) 都成立,这些学生才能交换成功。可以用map来统计pair<int,int>,最后判断一下。 

#include <cstdio>#include <cmath>#include <cstring>#include <string>#include <cstdlib>#include <iostream>#include <algorithm>#include <map>#include <utility>using namespace std;#define rep(i,j,k) for (int i=j;i<=k;i++)#define Rrep(i,j,k) for (int i=j;i>=k;i--)#define Clean(x,y) memset(x,y,sizeof(x))#define mp make_pairconst int maxn = 500005;int n;int x[maxn];int y[maxn];map< pair<int,int> , int > flag;bool check(){    if ( n & 1 ) return false;    rep(i,1,n)        if ( flag[ mp( x[i] , y[i] ) ] != flag[ mp( y[i] , x[i] ) ] ) return false;    return true;}int main(){    while(cin>>n)    {        if ( !n ) break;        flag.clear();        rep(i,1,n)        {            scanf("%d%d",&x[i],&y[i]);            flag[ mp(x[i],y[i]) ]++;        }        puts( check()?"YES":"NO");    }    return 0;}


0 0