算法习题---5-4交换学生(UVa10763)
一:题目
有一组学生,他们手中分别有自己学校和想要去的目标学校(A,B)。为了成功的交换学生,必须保证这一组学生中必须每两个人之间满足
s1 (A,B) 和 s2 (B,A)。即两者原来和目标学校相对应,可以实现交换
(一)样例输入
10 1 2 2 1 3 4 4 3 100 200 200 100 57 2 2 57 1 2 2 1 10 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 0
(二)样例输出
YES
NO
二:代码实现
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <vector> #include <map> using namespace std; int main() { freopen("data5_4_h.in", "r", stdin); freopen("data5_4_h.out", "w", stdout); int num; while (cin >> num && num!=0) { map<int, int> first_id_map, second_id_map; vector<int> first_id_vec; //信息获取 for (int i = 0; i < num; i++) { int f, s; cin >> f >> s; first_id_map[f] = s; second_id_map[s] = f; first_id_vec.push_back(f); } //信息匹配 bool flag = true; for (int i = 0; i < num; i++) if (first_id_map[first_id_vec[i]] != second_id_map[first_id_vec[i]]) { flag = false; break; } if (flag) cout << "YES" << endl; else cout << "NO" << endl; } freopen("CON", "r", stdin); freopen("CON", "w", stdout); return 0; }