思路:
每一个想从A学校换到B学校的学生必须找到一个唯一的从B学校换到A学校的学生。可以定义一个arr[ ]数组作为AB的关系,并对每一对关系进行swap(arr[a],arr[b]),如果交换成功,最后的对于每一个 i,必有arr[ i ]= i。
#include <iostream>
#include <algorithm>
#include <cstdlib>
using namespace std;
const int maxn=500000+5;
int arr[maxn];
void init()
{
for(int i=0;i<maxn;++i)//必须这种格式,否则WA死你
arr[i]=i;
}
bool isok()
{
for(int i=0;i<maxn;++i)
if(arr[i]!=i)
return false;
return true;
}
int main()
{
int n;
while(cin>>n&&n)
{
init();
int a,b;
for(int i=0;i<n;++i)
{
cin>>a>>b;
swap(arr[a],arr[b]);
}
if(isok())
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}

本文介绍了一种确保每个希望交换学校的学生都能成功配对的方法。通过定义数组来记录学生之间的匹配关系并进行交换操作,最终验证所有学生的交换意愿是否得到满足。

被折叠的 条评论
为什么被折叠?



