题目地址:http://vjudge.net/problem/UVA-10763
题目明显是 A到B要找个B到A的学生
3
1 2
2 3
3 1
案例按理说是错的,但却能AC,就是按出入度记录(只要成环就是对的)
思路:A->B的学生数量和B->A的学生数量要一样
#include <bits/stdc++.h>
using namespace std;
#define REP(i,a,b) for(int i=a;i<=(int)(b);++i)
#define REPD(i,a,b) for(int i=a;i>=(int)(b);--i)
map<pair<int,int> ,int> cnt;
int x[500000+5],y[500000+5];
bool solve(int n){REP(i,1,n) if(cnt[make_pair(x[i],y[i])]!=cnt[make_pair(y[i],x[i])]) return false;return true;
}
int main(int argc, char const *argv[])
{int n;while(scanf("%d",&n)==1&&n){int s1,s2;cnt.clear();REP(i,1,n) {scanf("%d%d",&s1,&s2);x[i]=s1,y[i]=s2;cnt[make_pair(s1,s2)]++;}printf("%s\n", solve(n)?"YES":"NO");}return 0;
}