当前位置: 代码迷 >> 综合 >> 交换学生(Foreign Exchange ,UVa10763)
  详细解决方案

交换学生(Foreign Exchange ,UVa10763)

热度:24   发布时间:2023-12-28 06:21:49.0

交换学生(Foreign Exchange ,UVa10763)

 

题目描述:

n1<=n<=500000)个学生想交换到其他学校学习

AB学校的前提是找到一个BA的搭档

n个学生两两两交换就okA,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;
}

 

  相关解决方案