HDU 6200 mustedge mustedge mustedge [LCT+缩点]

HDU 6183 Color it [CDQ分治+线段树+位压缩] 阅读详情

题意:给你n个点m条边,有q个操作:

①u和v之间加入一条边;

②询问u和v之间的桥的个数;

题解:刚刚开始的时候还以为需要边化点,后来发现其实只要记录bcc分量的个数减一就是桥的个数(因为是棵树= =),这样我们就可以通过LCT维护bcc,然后通过缩点减少复杂度和计算答案。(这里T了好久)

首先对于新加入的边,我们make_root(u);access(v);splay(v);得到这个环上的所有点,然后搜索这个splay上的所有点,连接到新的节点。

对于询问我们make_root(u);access(v);splay(v); 然后输入sum[v]-1就可得到u到v的桥的数量。

(注意:LCT模板中的pre[x]都需要找到最终的bcc所属)

AC代码:

 

#include<stdio.h>    
#include<string.h>
#include<algorithm>    
#define N 200005    
using namespace std; 
inline char nc(){  
    static char buf[100000],*p1=buf,*p2=buf;  
    return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;  
}  
inline int _read(){  
    char ch=nc();int sum=0;  
    while(!(ch>='0'&&ch<='9'))ch=nc();  
    while(ch>='0'&&ch<='9')sum=sum*10+ch-48,ch=nc();  
    return sum;  
}    
int rev[N],ch[N][2],pre[N],fa[N],st[N],sum[N],have[N],bcc[N],t,n;   
int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}//并查集  
int find2(int x){return bcc[x]==x?x:bcc[x]=find2(bcc[x]);}//并查集     
bool is_root(int x){return ch[find2(pre[x])][0]!=x&&ch[bcc[pre[x]]][1]!=x;}   
void reverse(int x)    
{    
    rev[x]^=1;swap(ch[x][0],ch[x][1]);    
    rev[ch[x][0]]^=1;rev[ch[x][1]]^=1;    
}    
void update(int x)    
{    
     sum[x]=sum[ch[x][0]]+sum[ch[x][1]]+have[x];
}    
void rotate(int x)    
{    
    int y=find2(pre[x]),z=find2(pre[y]);    
    bool f=ch[y][1]==x;    
    if(!is_root(y))ch[z][ch[z][1]==y]=x;    
    ch[y][f]=ch[x][!f];ch[x][!f]=y;    
    pre[x]=z;pre[y]=x;pre[ch[y][f]]=y;    
    update(y);update(x);    
}    
void splay(int x)    
{    
    st[t=1]=x;    
    for(int y=x;!is_root(y);st[++t]=y=find2(pre[y]));    
    for(;t;t--)if(rev[st[t]])reverse(st[t]);    
    for(;!is_root(x);rotate(x))if(!is_root(find2(pre[x])))    
        ch[bcc[pre[x]]][0]==x^ch[find2(pre[bcc[pre[x]]])][0]==bcc[pre[x]]?rotate(x):rotate(bcc[pre[x]]);    
    update(x);    
}    
void access(int x){for(int t=0;x;ch[x][1]=t,t=x,x=find2(pre[x])){if(t)update(t);splay(x);}}    
void make_root(int x){access(x);splay(x);rev[x]^=1;}    
void link(int x,int y){make_root(x);make_root(y);pre[x]=y;}//将x的父亲设为y     
void cut(int x,int y){make_root(x);access(y);splay(y);pre[x]=ch[y][0]=0;}    
void rebuild(int root,int n)
{
	if(root==0)return ;
	bcc[root]=n;
	rebuild(ch[root][0],n);
	rebuild(ch[root][1],n);
}
int main()
{
	//freopen("data.txt","r",stdin);
	int T,cas=1;
	T=_read();
	while(T--)
	{
		memset(rev,0,sizeof(rev));
		memset(ch,0,sizeof(ch));
		memset(pre,0,sizeof(pre));
		memset(st,0,sizeof(st));
		for(int i=1;i<N;i++)fa[i]=bcc[i]=i,sum[i]=have[i]=1;
		int n,m;
		n=_read();m=_read();
		for(int i=0;i<m;i++)
		{
			int u,v;
			u=_read();v=_read();
			int t1=find(u),t2=find(v);
			find2(u);find2(v);
			if(t1!=t2)link(bcc[u],bcc[v]),fa[t2]=t1;
			else 
			{
				if(bcc[u]==bcc[v])continue;
				make_root(bcc[u]);
				access(bcc[v]);
				splay(bcc[v]);
				n++;have[n]=sum[n]=1;
				rebuild(bcc[v],n);
			}
		}
		int q;
		q=_read();
		printf("Case #%d:\n",cas++);
		while(q--)
		{
			int op,u,v;
			op=_read();u=_read();v=_read();
			if(op==1)
			{
				int t1=find(u),t2=find(v);
				find2(u);find2(v);
				if(t1!=t2)link(bcc[u],bcc[v]),fa[t2]=t1;
				else 
				{
					if(bcc[u]==bcc[v])continue;
					make_root(bcc[u]);
					access(bcc[v]);
					splay(bcc[v]);
					n++;have[n]=sum[n]=1;
					rebuild(bcc[v],n);
				}
			}
			else 
			{
				int t1=find(u),t2=find(v);
				find2(u);find2(v);
				if(t1!=t2)
				{
					printf("0\n");
					continue;
				}	
				make_root(bcc[u]);
				access(bcc[v]);
				splay(bcc[v]);
				printf("%d\n",sum[bcc[v]]-1);
			}
		}
	}
	
}

 

 

 

 

 

matlab电偶极子源码,电偶极子的MATLAB场模拟 电偶极子周围电场电势分布的MATLAB三维模拟Matlab可以用于模拟四维场的效果,本文以电偶极子的电场和电势场为例展示MATLAB在该方面领域的应用。摘要电偶极子由一个正电荷和一个负电荷组成,其电场和空间电势分布与单电荷相比具有一些重要的特性。本文将给出电场和电势场的近似表达式。这两个量的精确表达式是复杂的,不太常用,因此 MATLAB 被采用来操作精确值和绘制三维分布的远区域, 近区域和一侧区... 阅读详情

相关推荐

SpringDoc 基本使用指南

SpringDoc 凭借零配置启动注解简洁和深度兼容 Spring 生态的优势,已成为 Spring Boot API 文档的首选工具。自动化- 减少手动维护文档的成本;标准化- 严格遵循 OpenAPI 3 规范;可扩展- 分组、安全控制灵活适配复杂项目。访问即可查看交互式文档(默认路径)

墨鸦的博客 1万+

HDU 6200 mustedge mustedge mustedge(树链剖分LCA+并查集+BIT)

Description 给出一个nnn个点mmm条边的无向图,无重边无自环两种操作 1&nbsp;u&nbsp;v:1&nbsp;u&nbsp;v:1\ u\ v:在u,vu,vu,v之间加一条边 2&nbsp;u&nbsp;v:2&nbsp;u&nbsp;v:2\ u\ v:查询uuu到vvv的路径上割边数量 Input 第一行输入一整数TTT表示用例组数,每组用例首先输入两个整数n,...

ZSQ 400

Xilinx-复旦微-FPGA-眼图BlockDesign系统制作-针对PCIE系统

XIlinx-复旦微电子-FPGA-眼图BlockDesign系统制作-针对PCIE系统,手把手教你如何建立眼图测试

weixin_43444334的博客 2598

HDU-6200 mustedge mustedge mustedge

给出一个图,保证没有自环和重边,接下来有两种操作 1:u,v 在u,v之间加一条边 2:u,v 查询u,v路径的必经边的个数(就相当于桥)   给出图之后,先用Tarjan算法求出所有桥,还有Belong数组(标记每个点属于哪个强连通分量) 接下来用dfs重新建图,实际上建出来是一个树,保存每个点的父节点,以及在树中的深度   接下来对于2操作,就是寻找u,v所在的点(强连通分量)的...

wl16wzl的博客 334

避坑指南:RK3568双网口RMII模式DTS配置常见错误与调试技巧

本文详细解析了RK3568双网口RMII模式DTS配置中的常见错误与调试技巧,涵盖时钟配置、PHY识别、复位时序等关键问题。通过实战案例和系统化调试方法,帮助开发者快速解决百兆以太网连接不稳定、PHY识别失败等典型问题,提升开发效率。

weixin_42549037的博客 344

机器学习 线性回归 头歌实训

第1关:简单线性回归与多元线性回归 第2关:线性回归的正规方程解 第3关:衡量线性回归的性能指标 第4关:scikit-learn线性回归实践 - 波斯顿房价预测

weixin_57270536的博客 1万+

Hdu-6200 mustedge mustedge mustedge(动态树+并查集)

Give an connected undirected graph with n nodes and m edges, (n,m≤105) which has no selfloops or multiple edges initially. Now we have q operations (q≤105):    ⋅1 u v: add an

WZJRJ28 496

【图像超分】论文精读:Enhanced Deep Residual Networks for Single Image Super-Resolution(EDSR和MDSR)

最近对超分辨率的研究随着深度卷积神经网络 (DCNN) 的发展取得了进展。特别是,残差学习技术表现出更好的性能。在本文中,我们开发了一个增强的深度超分辨率网络(EDSR),其性能超过了当前最先进的 SR 方法。我们模型的显着性能改进是由于通过删除传统残差网络中不必要的模块进行优化。当我们稳定训练过程时,通过扩展模型大小可以进一步提高性能。我们还提出了一种新的多尺度深度超分辨率系统(MDSR)和训练方法,该方法可以在单个模型中重建不同缩放因子的高分辨率图像。所提出的方法在基准数据集上比最先进的方法表现出更好的

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 7925

hdu6200 mustedge mustedge mustedge

这个题好像链剖会T。然后后来学习了一下姿势。 见https://post.icpc-camp.org/d/724-hdoj-6200-mustedge-mustedge-mustedge/6然后我就实现了一下叉姐说的。一开始addedge那边写炸了。然后一直T,后来冷静了一下发现有问题。然后求lca由于内存的原因,我现在一般都用链剖了。#include <cstdio> #include <ios

luotuoqingshan的博客 695

152:vue+leaflet 判断一个点是否在一个电子围栏内

本文介绍了一个基于Vue+Leaflet的示例,演示如何判断点是否在电子围栏内。作者大剑师兰特(优快云知名博主)展示了使用polygon.getBounds().contains(latlng)方法检测点与多边形边界的关系。代码仅需80行,通过点击地图触发判断逻辑,结果显示提示信息。该技术可广泛应用于地理围栏、位置服务等场景,需要安装turf依赖。文章提供了完整源码和配置说明,适合GIS开发者学习参考。

大剑师兰特的GIS世界 757

基于matlab的LFM脉冲压缩仿真

传统雷达测距是通过发射点频脉冲串实现的,通过发射脉冲与回波的时延确定目标的距离。此类方法易于实现,对接收机的要求较低。一般要获取更好的距离分辨力,需要增加发射信号的带宽,对于点频脉冲信号即需要减小发射脉冲宽度;而为获取更大的探测距离,提升雷达威力,则需要发射更大占空比的脉冲串。由于点频信号的时宽带宽积约等于1,因此不能同时增加信号的时宽和带宽。若要保持距离分辨力,增大占空比就需要减少雷达的脉冲重复周期(PRT)。这样会减小雷达的无模糊探测距离,也会造成目标回波频繁被遮挡,损失雷达威力。

平时工作较为繁忙,私信消息一般晚上回复,谢谢大家~~ 1771

HDU 6200 mustedge ACM/ICPC 2017 Shenyang Online(LCT动态缩点)

说实话,之前一直觉得LCT的用法大致都知道了,比完赛才发现LCT还有这种操作……         大致题意:给你一个无向图,初始时没有重边和自环,然后可以支持不断的加边和询问操作。每次询问时,输出u到v的所有路径边集的交集大小。         所谓边集交集大小,即如果有u、v有两条完全不同的路径可以到达,那么这个交集大小就是0。如果有重合的部分,那么就是重合的边的数量。其实,这个交集如果没有考虑好确实也不知道该怎么处理。         这里我们先考虑两点之间若只有一条路径的情况,此时结果就是点的数量减去

alpc_qleonardo 871

Apifox接口测试+自动化测试

Apifox 接口测试+自动化测试快速入门!

程序员小杨哥的博客 1万+

hdu 6200 mustedge mustedge(并查集+树状数组 或者 LCT 缩点)

hdu 6200 mustedge mustedge(并查集+树状数组 或者 LCT 缩点) 题意: 给一张无向连通图,有两种操作 1 u v 加一条边(u,v) 2 u v 计算u到v路径上桥的个数 思路: 对于一颗树来说,其实就是统计u到v路径上白边的个数, 加边就是将u到v的路径上所有边都染黑,查询就是查询路径上白边的个数 由于树上每条边最多只会被修改一次,所以可以并查集暴力修改,每个点u指...

weixin_34234829的博客 191

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

hdu6200mustedge mustedge mustedge

Give an connected undirected graph with n nodes and m edges, (n,m≤105) which has no selfloops or multiple edges initially. Now we have q operations (q≤105):⋅1 u v: add an undirected edge from u to v;

OneDay_pyf的博客 842

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

HDU 6200 边双联通分量 + 并查集 + dfs序 + BIT

简略题意:初始给出一张无向图,两种操作: 1. 添加一条(u,v)(u, v)的无向边。 2. 问从uu到vv的路径上的割边有多少。假若不考虑添加边的操作,问有多少割边,我们只需要边双联通缩个点成树,树上的每个边都是割边。从而转化成树上两点间距离。从根dfs一下转化成有根树的问题。现在考虑添加边的过程,其实就是再缩点的过程,先不考虑如何缩点,假如缩了点之后,我们就需要动态更新两点间距离了。对此我

即使摸爬滚打,满身泥泞,我也要前进 468

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

HDU6200 mustedge mustedge mustedge (2017 ACM/ICPC Asia Regional Shenyang Online)

传送门题目大意给出一张连通图,现在有两种操作: ⋅1 u v\cdot 1\ u\ v:向图中加入一条连接uu和vv的边 ⋅2 u v\cdot 2\ u\ v:询问uu和vv之间的必经边的条数思路首先随便找到一个生成树,每条边的初始权值为1,对于所有非树边(u,v)(u,v),将生成树上uu到vv的路径上的所有边的权值都变为0,那么询问时只需要回答uu到vv的边权和即可,这就很容易了。 然后

geng4512的专栏 598

HDU 6203 ping ping ping [LCA+dfs序+树状数组]

HDU 6203 ping ping ping [LCA+dfs序+树状数组]

ACTerminate的博客 718

[HDU 6200] mustedge mustedge mustedge

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6200题目大意: 给出一个n个点m条边的连通无向图, 有两种操作, 1是新增一条无向边(u, v), 2是询问u->v的路径上必须经过的边的条数。思路: 答案就是将环缩点后的树上两点的距离。 先用tarjan缩点求出原图的树,对于每次加边会产生新环, 我们要维护树上两点的距离, 实际上只要维护每个点的深

zhysora的博客 416

后缀自动机详解

原论文(俄文)地址:suffix_automata   后缀自动机   后缀自动机(单词的有向无环图)——是一种强有力的数据结构,让你能够解决许多字符串问题。 例如,使用后缀自动机可以在某一字符串中搜索另一字符串的所有出现位置,或者计算不同子串的个数——这都能在线性 时间内解决。   直觉上,后缀自动机可以被理解为所有子串的简明信息。一个重要的事实是,后缀自动机以压缩后的形式包含了一...

DZYO的博客 4万+

hdu 6200 mustedge mustedge mustedge

Problem Description Give an connected undirected graph with n nodes and m edges, (n,m≤105) which has no selfloops or multiple edges initially.  Now we have q operations (q≤105):     ⋅1 u

lqybzx的专栏 517

HDU5361 In Touch(线段树 + 最短路)

传送门 恰逢才做过VFK的A+B Problem,发现这道题也可以那样搞。区间连边的时候,我们就可以给那个区间在线段树对应的标号上连边。 线段树也可以不建出来,直接当做一个标号的合集,不占用内存,只用模拟在线段树上找区间的过程就可以了。 如果不清楚的话,可以看下A+B Problem的题解里面配有插图。 连好边之后就可以直接跑Dijkstra。 分析一下时间复杂度,线...

weixin_33721427的博客 188

hdu 6053 TrickGCD [莫比乌斯函数]

HDU 6053 TrickGCD [莫比乌斯函数]

ACTerminate的博客 2880

HDU 6191 Query on A Tree [可持久化字典树]

题意:给你一棵有根树,树上每个节点有一个值,每次询问以u为根节点的子树异或上x的最大值。 题解:按照dfs序建关于数字的二进制可持久化字典树就好了= = AC代码:   #include&lt;stdio.h&gt; #include&lt;vector&gt; #include&lt;string.h&gt; #define N 100005 using namespace std; ...

ACTerminate的博客 2617

HDU 6035 Colorful Tree [树形dp]

HDU6035 Colorful Tree [树形dp]

ACTerminate的博客 2083

HDU 6299 Balanced Sequence [贪心]

题意 给你n个包含’(‘与’)’的字符串,可以将这些字符串任意排序,求所有排序中,子序列是正规括号序列的最大长度。 题解 首先我们对所有的字符串找到通过stack找到所有的串内正规括号子序列,之后剩下的串只有三种可能: 1. 只包含’(’ 2. 先是一串’)’然后再是一串’(’ 3. 只包含’)’ 然后,按照第一类,第二类,第三类的顺序放置串。对于第二类内的排序,首先按照’(‘个数贡...

ACTerminate的博客 1811
上一篇: HDU 6203 ping ping ping [LCA+dfs序+树状数组]
下一篇: 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 G. Xor [LCA+分块]
ACTerminate
博客等级 码龄10年 63粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值