UVa 10763 Foreign Exchange(map)
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)的更多相关文章
- uva 10763 Foreign Exchange <"map" ,vector>
Foreign Exchange Your non-profit organization (iCORE - international Confederation of Revolver Enthu ...
- UVA 10763 Foreign Exchange 出国交换 pair+map
题意:给出很多对数字,看看每一对(a,b)能不能找到对应的(b,a). 放在贪心这其实有点像检索. 用stl做,map+pair. 记录每一对出现的次数,然后遍历看看对应的那一对出现的次数有没有和自己 ...
- uva 10763 Foreign Exchange(排序比较)
题目连接:10763 Foreign Exchange 题目大意:给出交换学生的原先国家和所去的国家,交换成功的条件是如果A国给B国一个学生,对应的B国也必须给A国一个学生,否则就是交换失败. 解题思 ...
- UVA 10763 Foreign Exchange
Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Description Your non- ...
- uva:10763 - Foreign Exchange(排序)
题目:10763 - Foreign Exchange 题目大意:给出每一个同学想要的交换坐标 a, b 代表这位同学在位置a希望能和b位置的同学交换.要求每一位同学都能找到和他交换的交换生. 解题思 ...
- 【UVA】10763 Foreign Exchange(map)
题目 题目 分析 没什么好说的,字符串拼接一下再放进map.其实可以直接开俩数组排序后对比一下,但是我还是想熟悉熟悉map用法. 呃400ms,有点慢. 代码 #include < ...
- Foreign Exchange
10763 Foreign ExchangeYour non-profit organization (iCORE - international Confederation of Revolver ...
- UVA Foreign Exchange
Foreign Exchange Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Your non ...
- [刷题]算法竞赛入门经典(第2版) 5-4/UVa10763 - Foreign Exchange
题意:有若干交换生.若干学校,有人希望从A校到B校,有的想从B到C.C到A等等等等.如果有人想从A到B也刚好有人想从B到A,那么可以交换(不允许一对多.多对一).看作后如果有人找不到人交换,那么整个交 ...
随机推荐
- ios ideviceintaller安装
1.安装brew 打开终端输入: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/inst ...
- Js/jquery获取当前日期时间及其它操作
var myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年份(4位,1970-???? ...
- Centos7安装docker(转!)
时间在自己的运动中也会碰到挫折,遇到障碍,所以某一段时间也会滞留在哪一个房间里 <百年孤独> 转自:https://www.cnblogs.com/yufeng218/p/8370670. ...
- [UE4]单映射:TMap容器,字典表
一.TMap是什么 TMap是UE4中的一种关联容器,每个键都关联着一个值,形成了单映射关系.因此你可以通过键名来快速查找到值.此外,单映射要求每个键都是唯一的. 二.创建和填充单映射 如果你想创建一 ...
- javascript继承之原型链(一)
function Father() { this.fatherValue = "爸爸"; } Father.prototype.getFatherValue = function ...
- width:100%和width:auto区别
在div父元素是body时 1.先看没有width限制的div <div style="border:1px solid red; margin-left:50px; margin-r ...
- web前端开发企业级CSS常用命名,书写规范总结
1.常用命名 标题: title 摘要: summary 箭头: arrow 商标: label 网站标志: logo 转角/圆角: corner 横幅广告: banner 子菜单: subMenu ...
- ORM( ORM查询13种方法3. 单表的双下划线的使用 4. 外键的方法 5. 多对多的方法 ,聚合,分组,F查询,Q查询,事务 )
必知必会13条 <1> all(): 查询所有结果 <2> get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或 ...
- remove ubuntu lvm
sudo vgdisplay sudo vgremove groupname
- 返回标签数据示例 (PHP)
标签接口函数 获取标签数据 array uc_tag_get(string tagname [, array nums]) 函数参数 参数 含义 string tagname 标签名称 array n ...