ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

DZY Loves Chinese II

2022-07-13 09:36:10  阅读:168  来源: 互联网

标签:连通 include Chinese int II 树边 Delta DZY 非树边


一、题目

点此看题

二、解法

建立原图的 \(\tt dfs\) 树,分树边和非树边考察连通性。设删边集合是 \(P\),设覆盖树边 \(e\) 的非树边构成集合 \(S_e\),特别地,对于非树边 \(e\) 令 \(S_e=\{e\}\),有结论:

  • 删边后图不连通等价于,\(\exist Q\not=\varnothing,Q\subseteq P,\Delta_{e\in Q} S_e=\varnothing\)(其中 \(\Delta\) 代表对称差,即集合异或)

必要性:对于一个极小的割边集合 \(Q\) 证明 \(\Delta _{e\in Q} S_e=\varnothing\) 即可。由于 \(Q\) 是割且 \(Q\) 极小,那么删去 \(Q\) 后图一定被分为两个联通块,对于与根不再联通的连通块,把它缩成一个点来考虑:

其中 \(3\) 是与根不再联通的连通块,那么对于 \(3\) 子树内未被删除的非树边,一定连向了 \(3\) 的一个严格祖先。那么它恰好经过了两条割边,被异或上了两次所以贡献为 \(0\);对于 \(3\) 子树内被删除了的树边,一定恰好经过一条割边,由于其自身需要贡献一次,所以贡献也为 \(0\)

充分性:对于满足 \(\Delta_{e\in Q} S_e=\varnothing\) 的集合 \(Q\) 证明它是割即可。至少会有一条树边 \(e_0\in Q\),那么被删除的树边会把原树划分为若干个连通块,我们把每个连通块缩成一个点,再用这些被删除的树边重构。考虑加入未被删除的非树边,如果把树黑白染色,那么这些非树边只会连接同色点,最后黑点和白点之间一定不连通,所以 \(Q\) 是割。

知道这个结论后,给每条非树边赋一个随机权值,对每条树边求出对应的权值,然后用线性基就可以判断这个条件了,时间复杂度 \(O(m+kq\log V)\)

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
using namespace std;
const int M = 1000005;
int read()
{
	int x=0,f=1;char c;
	while((c=getchar())<'0' || c>'9') {if(c=='-') f=-1;}
	while(c>='0' && c<='9') {x=(x<<3)+(x<<1)+(c^48);c=getchar();}
	return x*f;
}
int n,m,tot=1,Ind,f[M],w[M],a[M],b[32],id[M];
struct edge{int v,next;}e[M];
void dfs(int u,int fa)
{
	id[u]=++Ind;
	for(int i=f[u];i;i=e[i].next)
	{
		int v=e[i].v;
		if(v==fa) continue;
		if(!id[v])
			dfs(v,u),a[u]^=a[v],w[i>>1]=a[v];
		else if(id[u]>id[v])
			w[i>>1]=rand(),a[u]^=w[i>>1],a[v]^=w[i>>1];
	}
}
int main()
{
	n=read();m=read();srand(19260817);
	for(int i=1;i<=m;i++)
	{
		int u=read(),v=read();
		e[++tot]=edge{v,f[u]},f[u]=tot;
		e[++tot]=edge{u,f[v]},f[v]=tot;
	}
	dfs(1,0);
	for(int t=0,q=read();q--;)
	{
		int k=read(),f=1;
		memset(b,0,sizeof b);
		while(k--)
		{
			int z=read()^t,x=w[z],F=0;
			if(!f) continue;
			for(int i=30;i>=0;i--) if(x>>i&1)
			{
				if(b[i]) x^=b[i];
				else {b[i]=x;F=1;break;}
			}
			f&=F;
		}
		t+=f;
		puts(f?"Connected":"Disconnected");
	}
}

标签:连通,include,Chinese,int,II,树边,Delta,DZY,非树边
来源: https://www.cnblogs.com/C202044zxy/p/16472585.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有