难度:3
主要是map的应用,输入包含两个数,一个是现在学校,一个是目标学校,
这里建立pa到int的映射,为了统一前一个数大或者后一个数大,但是两者是互补的情况,先统一将大的放在前面,然后如果前一个数大就加1,后一个数大就减一,如果这种组合满足题意的话,那么它的映射应该是0。最后遍历映射,有一个值不为零就说明不能换成功,所有值都为零说明可以。
#include <bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define all(x) (x).begin(), (x).end()
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pa;
const int maxn = 500005;
int main() {
int n;
while (cin >> n && n) {
map<pa, int> mp;
for (int i = 0; i < n; i++) {
int x1, x2;
cin >> x1 >> x2;
pa cur = make_pair(max(x1, x2), min(x1, x2));
if (mp.find(cur) == mp.end()) mp[cur] = 0;
if (x1 < x2) mp[cur]--;
else mp[cur]++;
}
int ok = 1;
for (map<pa, int>::iterator it = mp.begin(); it != mp.end(); it++) {
if (it->se) {
ok = 0;
break;
}
}
cout << (ok ? "YES" : "NO") << endl;
}
return 0;
}