BZOJ2054 疯狂的馒头

来源:互联网 发布:怎样取消农村淘宝 编辑:程序博客网 时间:2024/04/27 23:37

对于每个点,只有最后一次染色是有意义的,所以我们倒着染色,然后一个点染完了我们就把他指向他后边第一个没被染过的点,然后每次沿着指针往后跳,用并查集优化这个过程,复杂度O(n)

#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<ctime>#include<cmath>#include<algorithm>#include<iomanip>#include<vector>#include<map>#include<set>#include<bitset>#include<queue>#include<stack>using namespace std;#define MAXN 1000010#define MAXM 1010#define INF 1000000000#define MOD 1000000007#define eps 1e-8#define ll long longint n,m,p,q;int f[MAXN];int c[MAXN];int fa(int x){return f[x]==x?x:f[x]=fa(f[x]);}int main(){int i,j,l,r;scanf("%d%d%d%d",&n,&m,&p,&q);for(i=1;i<=n+1;i++){f[i]=i;}for(i=m;i;i--){l=(i*p+q)%n+1;r=(i*q+p)%n+1;if(l>r){swap(l,r);}for(j=l;j<=r;j++){if(fa(j)==j){c[j]=i;f[j]=fa(j+1);}else{j=fa(j)-1;}}}for(i=1;i<=n;i++){printf("%d\n",c[i]);}return 0;}/**/


0 0
原创粉丝点击