博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【uva11987】带删除的并查集
阅读量:4992 次
发布时间:2019-06-12

本文共 2108 字,大约阅读时间需要 7 分钟。

题意:初始有N个集合,分别为 1 ,2 ,3 .....n。有三种操件

1 p q 合并元素p和q的集合
2 p q 把p元素移到q集合中
3 p 输出p元素集合的个数及全部元素的和。

 

题解:

并查集。只是并查集中并没有删除的操作。所以就需要将删除的这个点的影响降到0,也就是给删除的点申请一个新的id,以后都是用这个新的id来表示这个点,这样原来的那个集合里的点p就没意义,自然影响就为0。

就我写了debug那里比较坑。。

 

代码:

1 #include
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 8 typedef long long LL; 9 const int N=10*100100;10 int n,m,tot,id[N],fa[N],cnt[N];11 LL sum[N];12 13 int findfa(int x)14 {15 if(fa[x]==x) return x;16 return findfa(fa[x]);17 }18 19 int main()20 {21 freopen("a.in","r",stdin);22 freopen("a.out","w",stdout);23 while(scanf("%d%d",&n,&m)!=EOF)24 {25 for(int i=1;i<=n;i++) id[i]=i,fa[i]=i,cnt[i]=1,sum[i]=i;26 tot=n;27 for(int i=1;i<=m;i++)28 {29 int tmp,x,y,xx,yy;30 scanf("%d",&tmp);31 if(tmp==1)32 {33 scanf("%d%d",&x,&y);34 xx=findfa(id[x]);yy=findfa(id[y]);35 if(xx==yy) continue;//debug36 fa[xx]=yy;37 sum[yy]+=sum[xx];38 cnt[yy]+=cnt[xx];39 sum[xx]=0;cnt[xx]=0;40 }41 if(tmp==2) 42 {43 scanf("%d%d",&x,&y);44 xx=findfa(id[x]);yy=findfa(id[y]);45 tot++;46 id[x]=tot;47 fa[tot]=yy;48 sum[yy]+=(LL)x;49 cnt[yy]++;50 sum[xx]-=(LL)x;51 cnt[xx]--;52 }53 if(tmp==3)54 {55 scanf("%d",&x);56 xx=findfa(id[x]);57 printf("%d %lld\n",cnt[xx],sum[xx]);58 }59 // for(int j=1;j<=n;j++)60 // {61 // printf("%d fa = %d cnt = %d sum = %d\n",j,fa[id[j]],cnt[id[j]],sum[id[j]]);62 // }63 // printf("\n");64 }65 }66 67 return 0;68 }

 

转载于:https://www.cnblogs.com/KonjakJuruo/p/6042622.html

你可能感兴趣的文章
动态投资回收期Pt小于计算期n
查看>>
Python模拟登入豆瓣网,并爬取小组信息
查看>>
初识Jsp,JavaBean,Servlet以及一个简单mvc模式的登录界面
查看>>
@import与link的区别与选择
查看>>
ORA-14411 该 DDL 不能与其他 DDL 并行运行处理办法
查看>>
C#筛法求出范围内的所有质数
查看>>
程序员常用的几款软件
查看>>
noi2014 起床困难综合症
查看>>
.NET ->> 分享一个字符串模糊匹配指数的方法
查看>>
HDU2907凸包+凹面
查看>>
BZOJ 1600: [Usaco2008 Oct]建造栅栏
查看>>
BZOJ 1574: [Usaco2009 Jan]地震损坏Damage
查看>>
Tiny4412 LED 程序
查看>>
电脑购买建议
查看>>
[C++]for 循环多个限制条件
查看>>
发送邮件
查看>>
Docker从入门到实战(一)
查看>>
MySql join匹配原理
查看>>
C++的高效从何而来
查看>>
吴裕雄--天生自然 HADOOP大数据分布式处理:安装XShell
查看>>