题意:n个国家的学生要去别的国家学校交换,给出a,b,来自哪个国家,要去哪个国家,问这个方案是否可行。
思路:转换图里关系,a要去b,则a->b +1 b->a -1,看最后整个图是不是为0
#include <fstream> #include <iostream> #include <string> #include <complex> #include <math.h> #include <set> #include <vector> #include <map> #include <queue> #include <stdio.h> #include <stack> #include <algorithm> #include <list> #include <ctime> #include <memory.h> #include <ctime> #include <assert.h> #define rep(i,a,n) for (int i=a;i<n;i++) #define per(i,a,n) for (int i=n-1;i>=a;i--) #define pb push_back #define mp make_pair #define all(x) (x).begin(),(x).end() #define fi first #define se second #define eps 1e-8 #define M_PI 3.141592653589793 typedef long long ll; const ll mod=1000000007; const int inf=99999999; ll powmod(ll a,ll b) {ll res=1;a%=mod;for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;} using namespace std; const int maxn=1010; int M[maxn][maxn]; int maxx; bool is_ok() { for(int i=1;i<=maxx;i++){ for(int j=1;j<=maxx;j++){ if(M[i][j]!=0) return false; } } return true; } int main() { int n; while(cin>>n&&n){ memset(M,0,sizeof(M)); for(int i=0;i<n;i++){ int a,b;cin>>a>>b; maxx=max(maxx,max(a,b)); M[a][b]+=1,M[b][a]-=1; } if(n%2){ cout<<"NO"<<endl; continue; } if(is_ok()) cout<<"YES"<<endl; else cout<<"NO"<<endl; } }