大致意思是有n个杯子,第一个杯子有一枚金牌
此后m行输入两个整数,表示交换了a[i]和b[i]两个位置上的杯子
k表示会循环的轮数
比如输入:
4 3 2
2 3
1 2
3 4
会输出:
4
第一轮:
一开始金牌在位置1
2 3交换,位置不变
1 2交换,到达位置2
3 4交换,位置不变
第二轮:
2 3交换,到达位置3
1 2交换,位置不变
3 4交换,到达位置4
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,m,k,a[55555],b[55555];
bool zt[55555];
int main()
{
//freopen("game.in","r",stdin);
//freopen("game.out","w",stdout);
scanf("%d%d%d",&n,&m,&k);
memset(zt,0,sizeof(zt));
zt[1]=true;
for(int i=1;i<=m;++i)
scanf("%d%d",&a[i],&b[i]);
for(int i=1;i<=k;++i)
for(int j=1;j<=m;++j)
if(zt[a[j]]==true)
zt[a[j]]=false,zt[b[j]]=true;
for(int i=1;i<=n;++i)
if(zt[i]==true)
{printf("%d",i);break;}
//fclose(stdin);
//fclose(stdout);
return 0;
}
那么问题来了数据范围给的是 1<=n,m,k<=10^5
for(int i=1;i<=k;++i)
for(int j=1;j<=m;++j)
这层嵌套循环会不会爆掉
如果会该怎么优化