交换学生

 

思路:

最开始我是这样想的,将所有的组合保存在map中,key值为本校value为目标学校,将所有的值保存好后,用map[i]的值和map[map[i]]的值比较如果相等说明是可以交换的,直到全部比较完,但后来发现每个学校不只有一个人去交换,map的key不能保存相同的值,所以在这个的基础上,将map的第一个值改为pair,将每一组都保存下来,每次相同的时候只需要将该value++就可以

代码如下:

#include<iostream>
using namespace std;
#include<cstdio>
#include<map>


typedef pair<int, int> pa;
int main(void)
{
    int n;
    while (cin >> n && n)
    {
        int a, b;
        map<pa, int> mp;
        while (n--)
        {
            cin >> a >> b;
            mp[{a, b}]++;
        }
        int q = 1;//记录是否可以交换
        for (map<pa, int>::iterator it = mp.begin(); it != mp.end(); it++)
        {
            if (mp.count({ it->first.second,it->first.first }))
            {
                if (mp[{it->first.first, it->first.second}] != mp[{it->first.second, it->first.first}])
                {
                    q = 0;
                    break;
                }
            }
            else
            {
                q = 0;
                break;
            }
        }
        if (q)cout << "YES" << endl;
        else cout << "NO" << endl;
    }
    return 0;
}

 

posted @ 2021-02-01 10:18  loliconsk  阅读(112)  评论(0)    收藏  举报