#include<stdio.h>
#include<iostream>
#include<set>
#include<map>
#include<string>
using namespace std;
typedef set<int>Set;
map<Set,int>M;
void Find( Set S){
if( !M.count(S)) M[S]=1;
else{
M.erase(S);
}
}
int main()
{
//freopen("in.txt","r",stdin);
int n,num1,num2;
while(scanf("%d",&n)!=EOF&&n!=0){
M.clear();
while(n--){
Set S;
scanf("%d %d",&num1,&num2);
S.insert(num1);
S.insert(num2);
Find(S);
}
if(M.size()==0) printf("YES\n");
else printf("NO\n");
}
}
思路:
1. 将每一行的数字存入一个set中,并把这个set映射到map中去
2. 有这个set,将map中的关键字变为2,如果没有,则变为1
3. 最后遍历map,看是否有1,有一则输出NO
set的用法:
begin()--返回指向第一个元素的迭代器
clear()--清除所有元素
count()--返回某个值元素的个数
insert()--在集合中插入元素
empty()--如果集合为空,返回true
end()--返回指向最后一个元素的迭代器
erase()--删除集合中的元素
find()--返回一个指向被查找到元素的迭代器
size()--集合中元素的数目
swap()--交换两个集合变量
lower_bound()--返回指向大于(或等于)某值的第一个元素的迭代器
upper_bound()--返回大于某个值元素的迭代器
https://blog.csdn.net/yas12345678/article/details/52601454
map的用法:
map的基本操作函数:
begin() 返回指向map头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数
empty() 如果map为空则返回true
end() 返回指向map末尾的迭代器
equal_range() 返回特殊条目的迭代器对
erase() 删除一个元素
find() 查找一个元素
get_allocator() 返回map的配置器
insert() 插入元素
key_comp() 返回比较元素key的函数
lower_bound() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器
size() 返回map中元素的个数
swap() 交换两个map
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素value的函数