UVA 10763 Foreign Exchange .
2016-11-09 18:06
323 查看
题目地址:http://vjudge.net/problem/UVA-10763
题目明显是 A到B要找个B到A的学生
3
1 2
2 3
3 1
案例按理说是错的,但却能AC,就是按出入度记录(只要成环就是对的)
思路:A->B的学生数量和B->A的学生数量要一样
#include <bits/stdc++.h>
using namespace std;
#define REP(i,a,b) for(int i=a;i<=(int)(b);++i)
#define REPD(i,a,b) for(int i=a;i>=(int)(b);--i)
map<pair<int,int> ,int> cnt;
int x[500000+5],y[500000+5];
bool solve(int n){
REP(i,1,n) if(cnt[make_pair(x[i],y[i])]!=cnt[make_pair(y[i],x[i])]) return false;
return true;
}
int main(int argc, char const *argv[])
{
int n;
while(scanf("%d",&n)==1&&n){
int s1,s2;
cnt.clear();
REP(i,1,n) {
scanf("%d%d",&s1,&s2);
x[i]=s1,y[i]=s2;
cnt[make_pair(s1,s2)]++;
}
printf("%s\n", solve(n)?"YES":"NO");
}
return 0;
}
题目明显是 A到B要找个B到A的学生
3
1 2
2 3
3 1
案例按理说是错的,但却能AC,就是按出入度记录(只要成环就是对的)
思路:A->B的学生数量和B->A的学生数量要一样
#include <bits/stdc++.h>
using namespace std;
#define REP(i,a,b) for(int i=a;i<=(int)(b);++i)
#define REPD(i,a,b) for(int i=a;i>=(int)(b);--i)
map<pair<int,int> ,int> cnt;
int x[500000+5],y[500000+5];
bool solve(int n){
REP(i,1,n) if(cnt[make_pair(x[i],y[i])]!=cnt[make_pair(y[i],x[i])]) return false;
return true;
}
int main(int argc, char const *argv[])
{
int n;
while(scanf("%d",&n)==1&&n){
int s1,s2;
cnt.clear();
REP(i,1,n) {
scanf("%d%d",&s1,&s2);
x[i]=s1,y[i]=s2;
cnt[make_pair(s1,s2)]++;
}
printf("%s\n", solve(n)?"YES":"NO");
}
return 0;
}
相关文章推荐
- uva 10763 Foreign Exchange我认为我这种做法最符合题意!
- UVa 10763 - Foreign Exchange
- uva 10763 Foreign Exchange
- UVa 10763 - Foreign Exchange
- UVA 10763 Foreign Exchange
- UVA10763--ForeignExchange
- uva 10763 多种方法
- uva 10763 Foreign Exchange
- uva 10763 Foreign Exchange 交换生
- I - Foreign Exchange UVA - 10763
- UVA 10763 Foreign Exchange 出国交换 pair+map
- UVa 10763 - Foreign Exchange
- Uva 10763 Foreign Exchange
- uva 10763 - Foreign Exchange
- UVa 10763 Foreign Exchange
- UVA 10763-Foreign Exchange(求入度出度是否相等)
- UVA 10763 - Foreign Exchange(二分查找)
- UVA ~ 10763 ~ Foreign Exchange (map模拟)
- UVA 10763 Foreign Exchange 出国交换 pair+map
- UVA - 10763 Foreign Exchange