交换学生(Foreign Exchange ,UVa10763)

  • Post author:
  • Post category:其他


交换学生(Foreign Exchange ,UVa10763)

题目描述:





n





1<=n<=500000


)个学生想交换到其他学校学习




A





B


学校的前提是找到一个


B





A


的搭档




n


个学生两两两交换就


ok





A,B


用两个整数表示。

思路详解:


首先定义一个数组


d[ ]


存储每个学生本来的位置。当交换后,两个学生位置变换。


如果


A


想换到


B


,并且


B


想换到


A


,两两交换后,


d[A]





d[B]


不变,也就是学生位置不变。


否则,交换不可以进行。


代码:

#include <stdio.h>
#include <cmath>
#include <iostream>
using namespace std;
int d[500005];
void init()//初始化数组 
{
	int i;
	for(i=0;i<500005;i++)
	d[i]=i;
}

int main()
{
	int n;
	while(scanf("%d",&n)!=EOF&&n)
	{
		int i,a,b,flag=0;//flag标记交换能不能进行 
		init();
		for(i=0;i<n;i++)
			{
				scanf("%d %d",&a,&b);
				swap(d[a],d[b]);//交换两个学生的位置 
			}
		for(i=0;i<500005;i++)
			if(d[i]!=i){flag=1;printf("NO\n");break;}
		if(flag==0)printf("YES\n");
	}
	return 0;
}



版权声明:本文为qq_38854847原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。