题意:有n(n<=500000)个学生想交换到其他学校学习。为了简单起见,规定每个想从A学校交换到B学校的学生必须找到一个想从B交换到A的“搭档”。如果每个人都能找到搭档(一个人不能有多个搭档),学校就会同意他们进行交换。每个学生所在学校用两个整数A,B表示,你的任务是判断交换是否可以进行。
思路:用map保存这个学校需要交换出去多少人?
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
while (~scanf("%d", &n) && n)
{
map<int, int> M;
while (n--)
{
int a, b;
scanf("%d%d", &a, &b);
M[a]--; M[b]++;
}
bool flag = true;
for (auto i: M)
{
if (i.second != 0) { flag = false; break; }
}
if (flag) printf("YES\n");
else printf("NO\n");
}
return 0;
}