CF891C-Envy【可撤销并查集】

正题

题目链接:https://www.luogu.com.cn/problem/CF891C


题目大意

nnn个点mmm条边的一张无向联通图,每次询问一个边集能否同时出现在同一棵最小生成树上。

1≤n,m,q,wi,∑k≤5×1051\leq n,m,q,w_i,\sum k\leq 5\times 10^51n,m,q,wi,k5×105


解题思路

考虑KruskalKruskalKruskal的做法,每次找一条最小的边然后判断是否能够加入最小生成树。

考虑到边权相同的边可以任意排序,我们把它称之为同一层的边,并且无论任意排序最后产生的图的连通情况都不会改变。

我们把一个询问的边按照边分层,那么每层的边都合法这个询问就合法。

然后对于一个询问同一层的边,直接离线,然后把前面的层都加入之后,再把所有这些询问边加入判断是否合法即可。因为前面的层不能重新插,所以做完要撤销回去。

时间复杂度:O(nlog⁡n)O(n\log n)O(nlogn)(全部同级的话)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<stack>
using namespace std;
const int N=5e5+10;
struct node{int x,y,w;
}e[N],b[N];
int n,m,Q,k,cnt,fa[N],dep[N],mk[N];
bool ans[N];
vector<node> q[N];
vector<int> h[N];
stack<node> cl;
int find(int x)
{return (fa[x]==x)?x:find(fa[x]);}
void unionn(int x,int y){if(dep[x]>dep[y])swap(x,y);cl.push((node){x,y,dep[y]});fa[x]=y;dep[y]=max(dep[y],dep[x]+1);return;
}
bool cmp(node x,node y)
{return x.w<y.w;}
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=m;i++)scanf("%d%d%d",&e[i].x,&e[i].y,&e[i].w);scanf("%d",&Q);for(int i=1;i<=Q;i++){int k;scanf("%d",&k);for(int j=1,x;j<=k;j++)scanf("%d",&x),b[j]=e[x];sort(b+1,b+1+k,cmp);ans[i]=1;for(int j=1;j<=k;j++){if(b[j].w!=b[j-1].w)++cnt,h[b[j].w].push_back(cnt),mk[cnt]=i;q[cnt].push_back(b[j]);}}sort(e+1,e+1+m,cmp);for(int i=1;i<=n;i++)fa[i]=i;for(int l=1,r=1;l<=m;l=r+1){while(e[r+1].w==e[l].w)r++;int w=e[l].w;while(!cl.empty())cl.pop();for(int j=0;j<h[w].size();j++){int p=h[w][j];for(int i=0;i<q[p].size();i++){int x=q[p][i].x,y=q[p][i].y;x=find(x);y=find(y);if(x==y){ans[mk[p]]=0;break;}unionn(x,y);}while(!cl.empty()){node x=cl.top();cl.pop();dep[x.y]=x.w;fa[x.x]=x.x;}}for(int i=l;i<=r;i++){int x=find(e[i].x),y=find(e[i].y);if(x==y)continue;unionn(x,y);}}for(int i=1;i<=Q;i++)if(ans[i])puts("YES");else puts("NO");return 0;
}

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

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

相关文章

[2019CSP多校联赛普及组第五周] 调度CPU (贪心)

来来来&#xff0c;走过路过不要错过题目题解代码实现1代码实现2题目 ⼩Y同学有⼀块超级CPU&#xff0c;它有两个超级核⼼A和B。 A核⼼可以同时处理多项任务&#xff0c;每项任务处理时间为x&#xff0c;B核⼼只能同时处理⼀项任务&#xff0c;每项任务处理时间为y。 这⼀天…

8.12模拟:dp递推

文章目录前言本次最大收获考场复盘T1 lectureT2 n-thlonT3 assignmentT4 recoverset总结前言 245分 100704035 不太满意qwq &#xff08;被KH暴打 &#xff09; 后三道题全是部分分 而且T2和T3关键性质都出来了&#xff0c;距离正解只差临门一脚 但是就差了这一脚 感觉今天T2、…

NumSharp v0.6.1 科学计算库发布,支持标量和隐式转换

NumSharp&#xff08;Numerical .NET&#xff09;可以说是C&#xff03;中的科学计算库。 它是用C&#xff03;编写的&#xff0c;符合.netstandard 2.0库标准。 它的目标是让.NET开发人员使用NumPy的语法编写机器学习代码&#xff0c;从而最大限度地借鉴现有大量在python代码的…

【做题记录】CF1451E2 Bitwise Queries (Hard Version)

CF1451E2 Bitwise Queries (Hard Version) 题意&#xff1a; 有 \(n\) 个数( \(n\le 2^{16}\) &#xff0c;且为 \(2\) 的整数次幂&#xff0c;且每一个数都属于区间 \([0,n-1]\) ) 可以通过询问交互库不超过 \(n1\) 次询问&#xff0c;每次询问编号为 \(i,j\) ( \(1\le i,j \l…

P4301 [CQOI2013] 新Nim游戏

P4301 [CQOI2013] 新Nim游戏 题目&#xff1a; 在传统的Nim游戏基础上加一步&#xff0c;在第一个回合中&#xff0c;第一个游戏者可以直接拿走若干个整堆的火柴。可以一堆都不拿&#xff0c;但不可以全部拿走。第二回合也一样&#xff0c;第二个游戏者也有这样一次机会。从第…

51nod1667-概率好题【容斥,组合数学】

正题 题目链接:http://www.51nod.com/Challenge/Problem.html#problemId1667 题目大意 两个人。 第一个人有k1k_1k1​个集合&#xff0c;第iii个包括了范围[L1i,R1i][L1_i,R1_i][L1i​,R1i​]的整数。 第二个人有k2k_2k2​个集合&#xff0c;第iii个包括了范围[L2i,R2i][L2_i…

[Luogu2279][HNOI2003] 消防局的设立

文章目录题目法一&#xff1a;树上DP思路代码实现法二&#xff1a;贪心 搜索思路代码实现题目 2020年&#xff0c;人类在火星上建立了一个庞大的基地群&#xff0c;总共有n个基地。起初为了节约材料&#xff0c;人类只修建了n-1条道路来连接这些基地&#xff0c;并且每两个基…

8.13模拟:分治二分倍增快速幂

文章目录前言考场复盘T1 roadT2 shopT3 runT4 stairs总结前言 240分 100802040 T3少取了一个模结果全挂掉了&#xff08;好不容易推出来了…&#xff09; T2也因为各种奇怪的错误挂了分 qwq 吸取教训吧 考场 今天先看题 T1第一眼看错了题意觉得水的不行 T3YBT原题且很水 T2T…

dnSpy 强大的.Net反编译软件

一说起.net的反编译软件&#xff0c;大家首先想到的就是Reflector&#xff0c;ILSpy&#xff0c;dotPeek等等。而dnSpy同样是一款优秀的反编译软件&#xff0c;同时它是开源免费的。官方的描述是: dnSpy是一个调试器和.NET组件编辑器。 即使您没有任何可用的源代码&#xff0c;…

图的匹配

定义见&#xff1a;OI-Wiki 图的匹配 。 二分图 解法 \(1\) &#xff1a;网络流(通用) 二分图最大匹配可以转换成最大流(费用流)模型 。 如果使用 \(\operatorname{Dinic}\) 算法求该网络的最大流&#xff0c;复杂度\(O(\sqrt{n}m)\) 。 具体代码见博客文章网络流 。 解法 \(2\…

AT2161-[ARC065D]シャッフル/Shuffling【dp】

正题 题目链接:https://www.luogu.com.cn/problem/AT2161 题目大意 长度为nnn的0/10/10/1串&#xff0c;mmm个区间&#xff0c;你可以按照顺序任意排列区间中的数字&#xff0c;求最后的可能情况数。 保证给出区间的左端点不降。 1≤n,m≤30001\leq n,m\leq 30001≤n,m≤3000…

【acwing210 异或运算】

【acwing210 异或运算】 题意&#xff1a; 给定你由N个整数构成的整数序列&#xff0c;你可以从中选取一些&#xff08;甚至一个&#xff09;进行异或&#xff08;XOR&#xff09;运算&#xff0c;问所有能得到的不同的结果中第k小的结果是多少。 题解&#xff1a; 把所有数…

小奇探险

文章目录题目题解代码实现题目 小奇去遗迹探险&#xff0c;遗迹里有N个宝箱&#xff0c;有的装满了珠宝&#xff0c;有的装着废品。 小奇有地图&#xff0c;所以它知道每一个宝箱的价值&#xff0c;但是它不喜欢走回头路&#xff0c;所以要按顺序拿这N个宝箱中的若干个。 拿宝…

8.14 模拟:字符串

文章目录前言收获考场复盘T1 wordlistT2 passwordT3 readtreeT4 bracket总结前言 290分 2010070100 又被KH爆碾了qwq T1签到题脑抽写挂了80分… &#xff08;就差这80啊…&#xff09;、 收获 学会了启发式合并 还有一个把字符串所有后缀放进trie树的比较字符串的技巧 考场…

基于Asp.Net Core打造轻量级内部服务治理RPC(二 远程服务设计)

紧接上一篇《基于Asp.Net Core打造轻量级内部服务治理RPC(一)》文章。本文主要讲解基于Asp.Net Core的远程服务设计和实现。在上一篇中讲过,服务提供者提供的服务实际上就是一个Controller&#xff0c;那么是否在该程序中&#xff0c;服务都按照Asp.Net Core 中的Web Api的方式…

[TJOI2008]彩灯

题目&#xff1a; Peter 女朋友的生日快到了&#xff0c;他亲自设计了一组彩灯&#xff0c;想给女朋友一个惊喜。已知一组彩灯是由一排 N个独立的灯泡构成的&#xff0c;并且有 MM 个开关控制它们。从数学的角度看&#xff0c;这一排彩灯的任何一个彩灯只有亮与不亮两个状态&a…

51nod1229-序列求和V2【数学,拉格朗日插值】

正题 题目链接:http://www.51nod.com/Challenge/Problem.html#problemId1229 题目大意 给出n,k,rn,k,rn,k,r求 ∑i1nikri\sum_{i1}^ni^kr^ii1∑n​ikri 1≤T≤20,1≤n,r≤1018,1≤k≤20001\leq T\leq 20,1\leq n,r\leq 10^{18},1\leq k\leq 20001≤T≤20,1≤n,r≤1018,1≤k≤…

【做题记录】图论杂题

P1268 树的重量 $\texttt{solution}$ 算法&#xff1a;(贪心)\(\) 找规律 当 \(n2\) 时&#xff0c;显然答案就是 \(dis(1,2)\) 。 当 \(n3\) 时&#xff0c;答案&#xff1a; \[\dfrac{dis(1,3)dis(2,3)-dis(1,2)}{2} \]当 \(n\) 是任意的&#xff0c;第 \(n\) 条路径可以处于…

[NOIP 2009 提高组]最优贸易

勤劳的一更题目题解代码实现题目 C国有 n个大城市和 m 条道路&#xff0c;每条道路连接这n个城市中的某两个城市。任意两个城市之间最多只有一条道路直接相连。这 m 条道路中有一部分为单向通行的道路&#xff0c;一部分为双向通行的道路&#xff0c;双向通行的道路在统计条数…

8.15模拟:图论

文章目录前言收获考场复盘T1 recoverT2 teamT3 planT4 seqpath总结至暗时刻 前言 60分 303000 … 已经不是被KH爆碾的问题 &#xff08;KH屹立不倒%%%&#xff09; 昨天祈祷不要挂80了 结果今天挂了160&#xff08;还不算那个背包的70&#xff09; qwq 加油吧 奇怪的教训又增加…