Your non-profitorganization (iCORE - international Confederationof Revolver Enthusiasts) coordinates a very successfulforeign student exchange program. Over the last few years, demand hassky-rocketed and now you need assistance with your task.

The program yourorganization runs works as follows: All candidates are asked for their originallocation and the location they would like to go to. The program works out onlyif every student has a suitable exchange partner. In other words, if a studentwants to go from A to B, there must be another student who wants to go from Bto A. This was an easy task when there were only about 50 candidates, howevernow there are up to 500000 candidates!

Input
The input filecontains multiple cases. Each test case will consist of a line containing n -the number of candidates(1≤n≤500000), followed by n linesrepresenting the exchange information for each candidate. Each of these lineswill contain 2 integers, separated by a single space,representing the candidate's original location and the candidate's targetlocation respectively. Locations will be represented by nonnegative integernumbers. You may assume that no candidate will have his or her originallocation being the same as his or her target location as this would fall intothe domestic exchange program. The input is terminated by a case where n = 0;this case should not be processed.

Output
For each testcase, print "YES" on a single line if there is a wayfor the exchange program to work out, otherwise print"NO".

Sample Input
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

Sample Output
YES
NO

题意

有n个交换生,规定A想和B交换,必须确定B想和A交换,判断是否所有学生都可以交换

题解

这个题看似很简单,其实小细节很多

1.采用数组换过来再换回去最后判断是否全部对应来做(数组模拟不行)

例子解释

2

1 2   SWAP(S[1],S[2])

2 1 SWAP(S[2],S[1])

YES

最后S[1]=1,S[2]=2不变

反例

4

1 2

1 3

2 1

3 1

YES

2.A可以和B交换后,又出现A和B交换,这是可以的(map<int,int>不行)

反例

3

1 2

2 1

1 2

NO

3.A可以想和多个人交换B,C,D,E(甚至重复),但是A只能与1个人交换(map<int,vector<int> >不行)

反例

3

1 2

1 2

2 1

NO

所以我们只能考虑map<pair<int,int>,int>把A和A想和的人变成1个整体映射成1个数字(数字代表重复次数)

如果找到匹配,就减1

最后判断map里的所有值是否都为0

代码

 #include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> pi;
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int n,a,b;
while(cin>>n,n)
{
map<pi,int> stu;
for(int i=;i<n;i++)
{
cin>>a>>b;
stu[pi(a,b)]++;
if(stu[pi(b,a)]!=&&stu[pi(a,b)]!=)
{
stu[pi(a,b)]--;
stu[pi(b,a)]--;
}
}
int F=;
for(map<pi,int>::iterator it=stu.begin();it!=stu.end();it++)
{
if(it->second!=)
{
F=;
break;
}
}
if(F)cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return ;
}

UVa 10763 Foreign Exchange(map)的更多相关文章

  1. uva 10763 Foreign Exchange <"map" ,vector>

    Foreign Exchange Your non-profit organization (iCORE - international Confederation of Revolver Enthu ...

  2. UVA 10763 Foreign Exchange 出国交换 pair+map

    题意:给出很多对数字,看看每一对(a,b)能不能找到对应的(b,a). 放在贪心这其实有点像检索. 用stl做,map+pair. 记录每一对出现的次数,然后遍历看看对应的那一对出现的次数有没有和自己 ...

  3. uva 10763 Foreign Exchange(排序比较)

    题目连接:10763 Foreign Exchange 题目大意:给出交换学生的原先国家和所去的国家,交换成功的条件是如果A国给B国一个学生,对应的B国也必须给A国一个学生,否则就是交换失败. 解题思 ...

  4. UVA 10763 Foreign Exchange

      Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu   Description Your non- ...

  5. uva:10763 - Foreign Exchange(排序)

    题目:10763 - Foreign Exchange 题目大意:给出每一个同学想要的交换坐标 a, b 代表这位同学在位置a希望能和b位置的同学交换.要求每一位同学都能找到和他交换的交换生. 解题思 ...

  6. 【UVA】10763 Foreign Exchange(map)

    题目 题目     分析 没什么好说的,字符串拼接一下再放进map.其实可以直接开俩数组排序后对比一下,但是我还是想熟悉熟悉map用法. 呃400ms,有点慢.     代码 #include < ...

  7. Foreign Exchange

     10763 Foreign ExchangeYour non-profit organization (iCORE - international Confederation of Revolver ...

  8. UVA Foreign Exchange

    Foreign Exchange Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Your non ...

  9. [刷题]算法竞赛入门经典(第2版) 5-4/UVa10763 - Foreign Exchange

    题意:有若干交换生.若干学校,有人希望从A校到B校,有的想从B到C.C到A等等等等.如果有人想从A到B也刚好有人想从B到A,那么可以交换(不允许一对多.多对一).看作后如果有人找不到人交换,那么整个交 ...

随机推荐

  1. 魅族pro6部分应用内adb断开连接

    魅族pro6打开支付宝,adb自动断开链接,顶部有Flyme自动保护中. 进入手机管家的设置,将Flyme支付保护关掉 再次进入支付宝页面,adb不会再自动断开链接

  2. Python 天气预报+微信

    """ Description: 需要提供以下三个信息,在申请到的微信企业号当中可以找到 agentid corpid corpsecret Author:Nod Dat ...

  3. RAII(Resource Acquisition Is Initialization)简介

    RAII(Resource Acquisition Is Initialization),也称为“资源获取就是初始化”,是C++语言的一种管理资源.避免泄漏的惯用法.C++标准保证任何情况下,已构造的 ...

  4. lambda,sorted(),filter(),map(),递归,二分法

    1. lambda 匿名函数 语法: lambda 参数:返回值 不能完成复杂的操作例 # li=['21','asdd','weqeqw','wqf']# # it=iter(li)# # prin ...

  5. python中的模块及包及软件目录结构规范

    知识内容: 1.模块的定义与分类 2.模块的导入 3.模块与包 4.不同目录下的模块调用 一.模块的定义与分类 1.什么是模块 模块就是实现了某个功能的代码集合,模块是由一大堆代码构成的 类似于函数式 ...

  6. UVA133

    减少领取救济金排队的长度是一个严重的问题,The New National Green Labour RhinocerosParty (这个党派)依据如下规则.每天来领取救济金的人排成一个大圆环.任选 ...

  7. 本地git仓库常用操作

    SSH配置: 本机创建SSH key $ ssh-keygen -t rsa -C "youremail@example.com" 将SSHkey添加到git仓库:id_rsa.p ...

  8. ldap复制

    1.使用yum命令安装openldap,openldap-servers,openldap-clients $ yum install openldap $ yum install openldap- ...

  9. 二维数组 cudaMallocPitch() 和三维数组 cudaMalloc3D() 的使用

    ▶ 使用函数 cudaMallocPitch() 和配套的函数 cudaMemcpy2D() 来使用二维数组.C 中二维数组内存分配是转化为一维数组,连贯紧凑,每次访问数组中的元素都必须从数组首元素开 ...

  10. java 调用apache.commons.codec的包简单实现MD5加密

    转自:https://blog.csdn.net/mmd1234520/article/details/70210002/ import java.security.MessageDigest; im ...