题解:P15057 [UOI 2023 II Stage] Roads of Potokolandiya
kmszcll2024 · · 题解
前言
暴力过了?
题意
图中连
解题思路
求联通块,考虑暴力并查集。连
当无解时,输出 交给其他题解了)。
代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int fa[N];
int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
void join(int x,int y){
int f1=find(x),f2=find(y);
if(f1==f2)return;
fa[f1]=f2;
}
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)fa[i]=i;
for(int i=1;i<=n;i++)join(i,(i+i)>n?i+i-n:i+i);
int cnt=0;
for(int i=1;i<=n;i++){if(i==fa[i])cnt++;if(cnt>1){printf("NO\n");printf("%d %d",1,n);return 0;}}
printf("YES");
return 0;
}