首页 > 其他分享 >CF1763F Edge Queries

CF1763F Edge Queries

时间:2023-08-27 15:11:06浏览次数:38  
标签:num int top CF1763F son Edge 600001 Queries low

CF1763F Edge Queries

圆方树板子题,这题真的有3000吗

首先想到的是缩边双,但是以下情况边双不好处理:

image.png

点 \(2,3,4\) 在一个边双里,缩点之后该边双在 \(1\) 到 \(6\) 的路径上,但是显然 \((2,3),(3,4),(2,4)\) 这三条边并不属于 \(1\) 到 \(6\) 的路径。

考虑建立圆方树,定义方点的权值为它所代表的边双中边的数量(只有一条边时权值为 \(0\)),那么答案就是圆方树上两点间方点权值和,正确性是显然的,因为如果方点在 \(a,b\) 两点间,那么 \(a\) 到 \(b\) 的路径一定会经过这个点双,点双里的边是随便删的。

建出圆方树,维护树上前缀和,倍增或者剖求 LCA 即可,离线可以做到 \(\mathcal O(n)\),不过数据范围 \(\mathcal O(n \log n)\) 即可通过。

int n,m,num,kl,cnt,x[600001],dfn[600001],y[600001],low[600001],sum[600001],top[600001],siz[600001],son[600001],dep[600001],fa[600001];
vector<int> T[600001],G[600001];
stack<int> st;
void tarjan(int k)
{
	st.push(k),low[k]=dfn[k]=++cnt;
	for(auto to:G[k])
	{
		if(!dfn[to])
		{
			tarjan(to),low[k]=min(low[k],low[to]);
			if(low[to]>=dfn[k])
			{
				int y;++num;
				do T[num].eb(y=st.top()),st.pop(),T[y].eb(num);while(y!=to);
				T[num].eb(k),T[k].eb(num);
			}
		}
		else low[k]=min(low[k],dfn[to]);
	}
}
void dfs1(int k,int father,int depth)
{
	dep[k]=depth,fa[k]=father,siz[k]=1;
	for(auto to:T[k])
	{
		if(to==father)continue;
		dfs1(to,k,depth+1),siz[k]+=siz[to];
		if(siz[to]>siz[son[k]])son[k]=to;
	}
}
void dfs2(int k,int topp)
{
	if(sum[k]==1)--sum[k];
	sum[k]+=sum[fa[k]],top[k]=topp;
	if(son[k])dfs2(son[k],topp);
	for(auto to:T[k])if(to!=fa[k]&&to!=son[k])dfs2(to,to);
}
inline int LCA(int x,int y)
{
	while(top[x]!=top[y]){if(dep[top[x]]>dep[top[y]])swap(x,y);y=fa[top[y]];}
	return dep[x]>dep[y]?y:x;
}
inline void mian()
{
	read(n,m),num=n;int a,b;
	for(int i=1;i<=m;++i)read(x[i],y[i]),G[x[i]].eb(y[i]),G[y[i]].eb(x[i]);
	for(int i=1;i<=n;++i)if(!dfn[i])tarjan(i);
	dfs1(1,0,1);
	for(int i=1;i<=m;++i)
	{
		if(fa[x[i]]==fa[y[i]])++sum[fa[x[i]]];
		else if(fa[fa[x[i]]]==y[i])++sum[fa[x[i]]];
		else if(fa[fa[y[i]]]==x[i])++sum[fa[y[i]]];
	}
	dfs2(1,1),read(m);
	while(m--)read(a,b),kl=LCA(a,b),write(sum[a]+sum[b]-sum[kl]-sum[fa[kl]],'\n');
}

标签:num,int,top,CF1763F,son,Edge,600001,Queries,low
From: https://www.cnblogs.com/WrongAnswer90-home/p/17660313.html

相关文章

  • HyperLedger Fabric基础:搭建Fabric测试网络(三)
    在本系列第二篇中,我们介绍了如何创建通道与在通道上启动链码的问题。本篇将探索如何使用Peer客户端与区域链网络通信。启动测试网络后,可以使用Peer节点CLI与网络进行交互。Peer节点CLI允许您从CLI调用已部署的智能合约、更新通道或安装和部署新的智能合约。确定当前我们仍处于test-......
  • CodeForces 825G Tree Queries
    洛谷传送门CF传送门模拟赛赛时做法。看到查询路径点权最小值,想到建重构树,满足重构树上\(\operatorname{LCA}(x,y)\)为原树上\(x\toy\)路径的点权最小值。建树方法可以参考CF1797FLiHuaandPath。于是问题变成了,维护一个点集,支持加点,查询给定点\(x\)到点集中所有......
  • HyperLedger Fabric基础:搭建Fabric测试网络(二)
    在本系列第一部分中,我们介绍了搭建Fabric测试网络的目的、前提,并对其主要组件作了简介。在本部分中,我们将继续搭建Fabric测试网络的过程。创建通道¶既然我们的机器上运行起了Peers节点和Ordering排序节点,我们就可以使用该脚本为Org1和Org2之间的事务创建一个Fabric通道(Channel)。通......
  • Win10 Pdf默认打开方式总是修改为Edge浏览器的解决办法
    第一步:常规的设置为你需要设置的打开方式。找到PDF文件,右键属性,打开方式- 选择默认打开方式。第二步:修改注册表权限,限制系统自动修改。1.打开注册表找到计算机\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pdf\UserChoice项2.设置......
  • 「题解」Codeforces 825G Tree Queries
    点权转边权,把边权设为两个端点的\(\min\),然后发现询问\(x\)的答案,就是询问\(x\)与所有黑点的虚树,边权的\(\min\)是多少。假设要判定答案是否\(\geqk\),那么就是询问\(x\)只经过\(\geqk\)是否能到达所有黑点,于是想到建立Kruskal重构树,那么\(x\)与所有黑点的LCA......
  • ios8 UITableView设置 setSeparatorInset:UIEdgeInsetsZero不起作用的解决办法
    在ios7中,UITableViewCell左侧会有默认15像素的空白。这时候,设置setSeparatorInset:UIEdgeInsetsZero能将空白去掉。但是在ios8中,设置setSeparatorInset:UIEdgeInsetsZero已经不起作用了。下面是解决办法首先在viewDidLoad方法加入以下代码: if([self.tableViewrespondsToSelect......
  • Mixture-of-Domain-Adapters: Decoupling and Injecting Domain Knowledge to Pre-tra
    1.Abstract经过预训练的语言模型(PLM)表现出在通用领域理解文本的出色能力,同时在特定领域中表现不佳。尽管在大型领域特定语料库上继续预训练是有效的,但调整领域上的所有参数是昂贵的。在本文中,我们研究了是否可以通过只调整几个参数来有效地调整PLM。具体来说,我们将Transformer架......
  • 论文解读(KDSSDA)《Knowledge distillation for semi-supervised domain adaptation》
    Note:[wechat:Y466551|可加勿骚扰,付费咨询]论文信息论文标题:Knowledgedistillationforsemi-supervised domainadaptation论文作者:MauricioOrbes-Arteaga, JorgeCardoso论文来源:2019aRxiv论文地址:download论文代码:download视屏讲解:click1介绍 动机:在注释数......
  • GNN学习 Knowledge Graph Embedding(更新中)
    GNN学习KnowledgeGraphEmbedding前面提到的方法都是只有一种边的类型,接下来要扩展到有向,多种边的类型的图上,即异质图(heterogeneousgraph)异质图有这样的几种类型:RelationalGCNsKnowledgeGraphsEmbeddingsforKGCompletion一个异质图可以被定义为\(G=(V,E,R,T)\)......
  • CF1762D GCD Queries 题解
    题面给定一个长度为\(n\)的排列\(0,1,\cdots,n-1\)。可以进行最多\(2n\)次询问,每次询问给出两个下标\(i,j\),交互器会返回\(\gcd(p_i,p_j)\)。询问以后,需要输出两个下标\(x,y\),满足\(p_x=0\lorp_y=0\)。特别地,\(\gcd(0,x)=x\)。题解观察次数限制,我们......