pku 1703 Find them,Catch them

本文深入探讨了并查集的基本实现及其应用场景,特别是在处理元素集合的合并与查找问题上提供了有效的解决方案。通过具体实例展示了如何利用并查集解决实际问题,并介绍了如何避免常见的错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一般的种类并查集,只不过犯了点小错误,一直TLE

View Code
#include<stdio.h>
#include
<string.h>
int fa[100005],rank[100005],n;
void init()
{
for(int i=1;i<=n;i++)
{
fa[i]
=i;
rank[i]
=0;
}
}
int find(int x)
{
if(fa[x]==x) return x;
int tx=find(fa[x]);
rank[x]
=(rank[x]+rank[fa[x]])%2;
fa[x]
=tx;
return fa[x];
}
void unio(int x,int y,int tx,int ty)
{
fa[tx]
=ty;
rank[tx]
=(rank[x]+rank[y]+1)%2;
}
int main()
{
int t,a,b,m;
char str[5];
scanf(
"%d",&t);
while(t--)
{
scanf(
"%d%d",&n,&m);
init();
while(m--)
{

scanf(
"%s%d%d",str,&a,&b);
int ta=find(a);
int tb=find(b);
if(str[0]=='A')
{
if(ta!=tb)
{
printf(
"Not sure yet.\n");
}
else
{
if(rank[a]==rank[b])
{
printf(
"In the same gang.\n");
}
else printf("In different gangs.\n");
}
}
elseif(str[0]=='D')
{
if(ta!=tb)
unio(a,b,ta,tb);
}
}
}
return0;
}

 

并查集进阶!!!! http://www.orzminjie.info/?p=188001

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值