求助并查集简单题
  • 板块P2391 白雪皑皑
  • 楼主abc_de
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/9/3 11:58
  • 上次更新2023/10/27 12:44:07
查看原帖
求助并查集简单题
287395
abc_de楼主2022/9/3 11:58

不知道为什么会T 就过了一个点

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
int n,m,p,q;
int color[maxn],fa[maxn];
int rd(){
	int x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-') f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		x=(x<<1)+(x<<3)+ch-'0';
		ch=getchar();	
	}
	return x*f;
}
int find(int x){
	if(fa[x]==x) return x;
	return fa[x]=find(fa[x]);	
}
int main(){
	n=rd();m=rd();p=rd();q=rd();
	for(int i=1;i<=n;i++) fa[i]=i;
	for(int i=m;i>=1;i--){
		int l=(i*p+q)%n+1,r=(i*q+p)%n+1;
		if(l>r) swap(l,r);
		int fx=find(l),fy=find(r+1);
		while(fx<=r){
			color[fx]=i;
			fa[fx]=fy;
			fx=find(fx+1);
		}
	}
	for(int i=1;i<=n;i++) printf("%d\n",color[i]);
	return 0;	
}
2022/9/3 11:58
加载中...