题目:https://vjudge.net/problem/UVA-10763
思路:用学生的意向校映射来源校,用vector来保存每个意向校的学生的来源校,然后每次读取数据时查找是否有对应学校的学生想要交换,若有,则删去查找到的结果;若没有,将这条输入数据保存到映射中。最后判断映射是否为空就得出交换项目能否进行。
注:当映射的某个关键字对应的vector为空时,别忘把这个关键字删除。
代码:
#include <iostream>
#include <string>
#include <sstream>
#include <cstdio>
#include <iomanip>
#include <map>
#include <set>
#include <vector>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <deque>
using namespace std;
int main()
{
map<int, vector<int> > student;
int n;
while(cin>>n)
{
if(n==0)
{
break;
}
student.clear();
while(n--)
{
int from, to;
cin >> from >> to;
vector<int>::iterator it = find(student[to].begin(), student[to].end(), from);
if(it==student[to].end())
{
student[from].push_back(to);
}
else
{
student[to].erase(it);
}
if(student[to].empty())
{
student.erase(to);
}
}
if(student.empty())
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
return 0;
}