YbtOJ-毒瘤染色【LCT】

正题


题目大意

开始时有一张nnn个点没有边的图,qqq次操作加入一条边,如果加入后图是一个沙漠(只有边仙人掌的图)时才能够加入。

每次加入后询问:开始所有点都是白色,kkk次随机挑一个点染黑,求最后白色点的连通块数和黑色点的连通块数的和。

强制在线

1≤n≤105,1≤q≤3×105,1≤k≤1091\leq n\leq 10^5,1\leq q\leq 3\times 10^5,1\leq k\leq 10^91n105,1q3×105,1k109


解题思路

因为强制在线肯定需要用LCTLCTLCT维护,至于仙人掌我们维护在环上的边就好了。

然后考虑怎么求答案。

仙人掌的连通块数=点数-边数+环数。

至于本题我们可以考虑这些东西存在的期望数量。

wiw_iwi表示指定iii个点是白点的概率,那么显然就是(n−in)k(\frac{n-i}{n})^k(nni)k

然后设bib_ibi表示指定iii个点是黑点的概率,我们考虑容斥指定一些点是白点就是
bi=∑j=0i(ij)(−1)j(n−jn)kb_i=\sum_{j=0}^i\binom{i}{j}(-1)^j\left(\frac{n-j}{n}\right)^kbi=j=0i(ji)(1)j(nnj)k

这样是O(i)O(i)O(i)的,但是其实我们只有求环的出现概率时这个值会很大,但是环的大小和不超过nnn,所以可以在需要的时候暴力求。

时间复杂度:O(qlog⁡n)O(q\log n)O(qlogn)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stack>
#define ll long long
using namespace std;
const ll N=2e5+10,P=998244353;
struct LCT{ll fa[N],t[N][2],siz[N];bool w[N],v[N],lazy[N],r[N],p[N],hp[N];stack<ll> s;bool Nroot(ll x){return fa[x]&&(t[fa[x]][0]==x||t[fa[x]][1]==x);}bool Direct(ll x){return t[fa[x]][1]==x;}void PushUp(ll x){siz[x]=siz[t[x][0]]+siz[t[x][1]]+(!p[x]);w[x]=(p[x]&v[x])|w[t[x][0]]|w[t[x][1]];hp[x]=p[x]|hp[t[x][0]]|hp[t[x][1]]; return;}void Rev(ll x){r[x]^=1;swap(t[x][0],t[x][1]);return;}void Rvy(ll x){w[x]=hp[x];lazy[x]=v[x]=1;return;}void PushDown(ll x){if(r[x])Rev(t[x][0]),Rev(t[x][1]),r[x]=0;if(lazy[x]){if(t[x][0])Rvy(t[x][0]);if(t[x][1])Rvy(t[x][1]);lazy[x]=0;}PushUp(x);return;}void Rotate(ll x){ll y=fa[x],z=fa[y];ll xs=Direct(x),ys=Direct(y);ll w=t[x][xs^1];if(Nroot(y))t[z][ys]=x;t[y][xs]=w;t[x][xs^1]=y;if(w)fa[w]=y;fa[x]=z;fa[y]=x;PushUp(y);PushUp(x);return; }void Splay(ll x){ll y=x;s.push(x);while(Nroot(y))y=fa[y],s.push(y);while(!s.empty())PushDown(s.top()),s.pop();while(Nroot(x)){y=fa[x];if(!Nroot(y))Rotate(x);else if(Direct(x)==Direct(y))Rotate(y),Rotate(x);else Rotate(x),Rotate(x);}return;}void Access(ll x){for(ll y=0;x;y=x,x=fa[x])Splay(x),t[x][1]=y,PushUp(x);return;}void MakeRoot(ll x){Access(x);Splay(x);Rev(x);return;}void Link(ll x,ll y){MakeRoot(x);fa[x]=y;Access(x);return;}void Split(ll x,ll y){MakeRoot(x);Access(y);Splay(y);return;}
}T;
ll n,q,k,op,ans,fa[N],inv[N],fac[N],fnv[N];
ll find(ll x)
{return (fa[x]==x)?x:(fa[x]=find(fa[x]));}
ll power(ll x,ll b){ll ans=1;while(b){if(b&1)ans=ans*x%P;x=x*x%P;b>>=1;}return ans;
}
ll C(ll n,ll m)
{return fac[n]*fnv[m]%P*fnv[n-m]%P;}
ll W(ll x)
{return power((n-x)*inv[n]%P,k);}
ll B(ll x){ll ans=0;for(ll i=0;i<=x;i++){ll w=power((n-i)*inv[n]%P,k);w=w*C(x,i)%P;(ans+=w*((i&1)?-1:1))%=P;}return (ans+P)%P;
}
signed main()
{freopen("graph.in","r",stdin);freopen("graph.out","w",stdout);inv[1]=fnv[0]=fac[0]=1;for(ll i=2;i<N;i++)inv[i]=P-inv[P%i]*(P/i)%P;for(ll i=1;i<N;i++)fnv[i]=fnv[i-1]*inv[i]%P,fac[i]=fac[i-1]*i%P;scanf("%lld%lld%lld%lld",&n,&q,&k,&op);for(ll i=1;i<=n;i++)fa[i]=i,T.siz[i]=1;ll w2=W(2),b2=B(2),las=0;ans=(W(1)*n+op*B(1)*n)%P;int cnt=n;while(q--){ll x,y;scanf("%lld%lld",&x,&y);x^=las;y^=las;if(find(x)!=find(y)){fa[find(x)]=find(y);++cnt;T.p[cnt]=T.hp[cnt]=1;T.Link(x,cnt);T.Link(y,cnt);(ans-=w2+op*b2)%=P;}else if(x!=y){T.Split(x,y);if(!T.w[y]){T.w[y]=T.v[y]=T.lazy[y]=1;ll S=T.siz[y];(ans+=W(S)-w2)%=P;if(op)(ans+=B(S)-b2)%=P;}}ans=(ans+P)%P;printf("%lld\n",las=ans);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317616.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

潘淳的苏州.NET俱乐部成立有感!附我的录音

引言&#xff1a;今天是1月21日&#xff0c;我&#xff08;潘淳&#xff09;的生日&#xff0c;两天前刚刚过了他&#xff08;苏俱&#xff09;的生日&#xff0c;微软技术俱乐部&#xff08;苏州&#xff09;在苏州微软正式成立。作为大会活动的策划者和活动发起者之一&#x…

CF1338D:Nested Rubber Bands(树形dp)

解析 神仙题 关键在于找到一个满足题意的充要条件 结论&#xff1a;所有的合法答案一定是由树上一条链及其相邻的点组成的独立集 充分性比较显然&#xff0c;这个东西随便画画就可以构造出合法的解来 所以我们只要考虑必要性 考虑不满足这个结论的方案 可以“发现”它一定是…

cf1512F. Education

cf1512F. Education 题意&#xff1a; 小明想买一个价值为c的东西&#xff0c;他开始打工&#xff0c;他一开始在第i个职务&#xff0c;每天可以挣a[i]&#xff0c;他也可以用一天的时间并且花费b[i]升到i1职务&#xff0c;第i1职务每天可以挣a[i1] 一共有n个职务&#xff0c…

十年 IT 老兵带你通过案例学架构,附C#代码

技术大会上的分享大多高大上&#xff0c;亿级流量、超大型研发团队&#xff0c;虽然值得借鉴&#xff0c;但由于应用场景与研发资源的差异&#xff0c;一般企业并不容易落地。其实&#xff0c;中小型研发团队在IT行业还是占大多数&#xff0c;他们在技术架构方面的问题较多&…

【CF1100F】 Ivan and Burgers (分治+线性基)

description 戳我看题目(づ&#xffe3;3&#xffe3;)づ╭❤&#xff5e; solution 异或和最大 ——关联线性基 线性基&#xff1a; 原序列的每一个数都能由线性基里若干个数异或得到线性基里若干个数的异或结果不可能为0 如果直接线段树合并线性基时间复杂度是无法接受 离…

CF1019D-Large Triangle【计算几何,二分】

正题 题目链接:https://www.luogu.com.cn/problem/CF1019D 题目大意 给出nnn个点&#xff0c;保证没有三点共线&#xff0c;求是否有三个点围成的三角形面积恰好为SSS。 3≤n≤2103,1≤S≤210183\leq n\leq 2\times 10^3,1\leq S\leq 2\times 10^{18}3≤n≤2103,1≤S≤21018 …

11.8模拟:总结

考场 255pts 256070100 比期望低了45分qwq T1莫名其妙挂了五分… 而且似乎把数组开大还能再艹过去一个点 所以格局打开&#xff0c;一定要有梦想&#xff01; 以后即使2^n的暴力也要数组开到1e5 update&#xff1a;考试的时候审题有误&#xff01;“无法放置”的意思是不合法…

浅谈一致性Hash原理及应用

在讲一致性Hash之前我们先来讨论一个问题。问题&#xff1a;现在有亿级用户&#xff0c;每日产生千万级订单&#xff0c;如何将订单进行分片分表&#xff1f;小A&#xff1a;我们可以按照手机号的尾数进行分片&#xff0c;同一个尾数的手机号写入同一片/同一表中。大佬&#xf…

cf1512 G - Short Task

cf1512 G - Short Task 题意&#xff1a; 给一个c&#xff0c;求n&#xff0c;使得n的因数和为c 题解&#xff1a; 求因数和的裸题 我们直接预处理所有数的因数和 筛法求因数和 讲解博客 代码&#xff1a; 埃式筛nloglog&#xff08;1e7&#xff09; 1500ms #include<…

AT2675 [AGC018F] Two Trees (构造+二分图染色+并查集)

description 戳我看题目 solution 正解说是欧拉回路&#xff0c;但是于私而言非常难懂&#xff0c;如果有兴趣可以看香香mm的博客 定义一个点如果有偶数个儿子&#xff0c;就为奇点&#xff1b;如果有奇数个儿子&#xff0c;就为偶点 对于一个点的每个子树自身是满足mod21mo…

YbtOJ-连通的图【结论,线性基】

正题 题目大意 给出nnn个点nk−1nk-1nk−1条边的一张图&#xff0c;求有多少种删除若干条边的方案使得图依旧联通。 1≤n≤105,1≤k≤101\leq n\leq 10^5,1\leq k\leq 101≤n≤105,1≤k≤10 解题思路 注意到kkk很小&#xff0c;我们考虑先搞出一棵dfsdfsdfs树然后剩下的做非树…

模板:容斥优化多重方案背包

所谓容斥优化多重方案背包&#xff0c;就是利用容斥去优化统计方案的多重背包 &#xff08;逃&#xff09; 前言 考场上因为不会这个玩意活活把100分正解挂成了70 qwq 思想还是很妙的 就是先当完全背包做&#xff0c;然后扣去多统计的情况 注意扣去的使用k1个i的方案数是上一…

如何定义开发完成?(Definition of Done)

最近在拜读郑晔的10x程序员工作法&#xff0c;收益良多&#xff0c;文中提出一个概念叫DoD&#xff08;Definition of Done&#xff09;给我的感触颇深。这让我联想到实际工作过程中&#xff0c;经常遇到的扯皮、争吵等各种场景&#xff0c;其实就和这个DoD分不开。一、场景描述…

【正睿2021寒假省选第二轮集训 day 1】串 (后缀自动机+记忆化)

description 定义一个字符串的子串是这个字符串的某个连续区间的字符组成的串。比如&#xff0c;“djq"的子串是"d”,“j”,“q”,“dj”,“jq”,和"djq"。 定义F(a,b)为最长在字符串bb中至少出现一次的字符串a的子串&#xff0c;例如&#xff1a; F(“d…

YbtOJ-序列计数【组合数学,莫队】

正题 题目大意 求有多少个长度在l,rl,rl,r之间&#xff0c;值域是[1,n][1,n][1,n]的严格上升子序列 1≤T,n≤105,1≤l≤r≤1051\leq T,n\leq 10^5,1\leq l\leq r\leq 10^51≤T,n≤105,1≤l≤r≤105 解题思路 先转换成两个前缀和的差&#xff0c;那么相当于我们要快速求 ∑i0m…

欧拉筛法的应用

[数论]-----欧拉筛法的应用 文章目录1.求1~n之间的所有质数2.求1~n之间所有自然数的欧拉函数φ&#xff08;x&#xff09;3.求1~n之间的每个数的因子个数详细推导&#xff1a;代码&#xff1a;4.求1~n之间每个数的因数和详细的推导&#xff1a;代码&#xff1a;筛法求莫比乌斯函…

P5787 二分图 /【模板】线段树分治(线段树分治、并查集)

关于什么是合理的实现 解析 本题把并查集写在了题面上 然而&#xff0c;我却一直沉浸在一个及其通用的判断二分图的方法中&#xff1a; 一个图是二分图的充要条件是它没有奇环 怎么维护这个玩意&#xff1f;带权并查集&#xff01; 怎么套线段树分治&#xff1f;可持久化&…

全新尝试|ComponentOne WinForm和.NET Core 3.0

在微软 Build 2018 开发者大会上&#xff0c;.NET 团队公布了 .NET Core 的下一个主要版本 .NET Core 3.0 的规划蓝图&#xff1a;.NET Core 3将开始支持 Windows 桌面应用程序&#xff0c;包括 Windows Form、Windows Presentation Framework&#xff08;WPF&#xff09;和UWP…

[bzoj3625][Codeforces Round #250]小朋友和二叉树 (生成函数)

description 我们的小朋友很喜欢计算机科学&#xff0c;而且尤其喜欢二叉树。 考虑一个含有n个互异正整数的序列c[1],c[2],…,c[n]。如果一棵带点权的有根二叉树满足其所有顶点的权值都在集合{c[1],c[2],…,c[n]}中&#xff0c;我们的小朋友就会将其称作神犇的。并且他认为&am…

11.9模拟:总结

140pts 30100100 qwq 昨天有点被“写完这题就睡”坑到 所以今天状态不太好&#xff1f; 努力给自己找理由.jpg 最大的损失应该就是T1被降智了吧 那其实才是本场最水的一题 看到1e18的数据范围应该刻意往矩乘上想一想的 但我出门就走错了路 利用杨辉三角推了个大式子 从推出那个…