POJ1988--cube stacking(2007-04-18 17:01)
来源:互联网 发布:雅思词汇书哪本好 知乎 编辑:程序博客网 时间:2024/05/17 22:58
对并查集的扩展.看了下解题报告,总算有想法了.
sum[i]记录根结点i下面的结点数(包括自己)和up[i]记录在某结点i上面的结点数.则在一结点m之下的结点数为sum[findpar(m)]-up[m]-1 (findpar查找根结点)
在uni和findpar过程中更新sum和up的内容.(蓝色部分)
- #include "stdio.h"
- const int max_node=30005;
- int par[max_node+1];
- int up[max_node+1];
- int sum[max_node+1];
- int add;
- int findpar(int num){
- int top;
- if(par[num]!=num){
- top=findpar(par[num]);
- if(top!=par[num]){
- up[num]+=add;
- }
- add=up[num];
- par[num]=top;
- return top;
- }
- return num;
- }
- void uni(int a,int b){
- a=findpar(a);
- b=findpar(b);
- par[b]=a;
- up[b]=sum[a];
- sum[a]+=sum[b];
- }
- int main()
- {
- // freopen("1.in","r",stdin);
- int p;
- scanf("%d",&p);
- while(getchar()!='/n');
- int s,d;
- char c;
- int i;
- for(i=0;i< =max_node;++i){
- par[i]=i;
- up[i]=0;
- sum[i]=1;
- }
- while(p-->0){
- c=getchar();
- if(c=='M'){
- scanf("%d %d",&s,&d);
- while(getchar()!='/n');
- uni(s,d);
- }
- else{
- scanf("%d",&d);
- while(getchar()!='/n');
- printf("%d/n",sum[findpar(d)]-up[d]-1);
- }
- }
- return 0;
- }
- POJ1988--cube stacking(2007-04-18 17:01)
- POJ1988 Cube Stacking
- POJ1988 Cube Stacking
- poj1988 Cube Stacking
- poj1988 cube stacking
- POJ1988 Cube Stacking
- POJ1988 Cube Stacking
- POJ1988-Cube Stacking
- POJ1988 Cube Stacking
- POJ1988——Cube Stacking
- POJ1988 Cube Stacking [并查集]
- POJ1988 - Cube Stacking - 并查集
- poj1988 Cube Stacking 并查集
- 【POJ1988】Cube Stacking(并查集)
- POJ1988 Cube Stacking(并查集)
- POJ1988 Cube Stacking(并查集)
- POJ1988:Cube Stacking(并查集)
- 【北大夏令营笔记-并查集】poj1988-Cube Stacking
- 使用XFire+Spring构建Web Service(一)
- GDCPC2007的衣服:) (2007-04-17 23:39)
- POJ 300AC~~(2007-04-18 16:38)
- 美国总统候选人麦凯恩取笑女性,称其享受被猩猩强奸
- dotNET没用注册到IIS解决办法
- POJ1988--cube stacking(2007-04-18 17:01)
- MFC的DDX和DDV技术
- 使用XFire+Spring构建Web Service(二)
- GDCPC 2007 RP无限~~(2007-04-21 23:20)
- 性能测试资料汇总【常见问题篇】
- ajax.net控件的简单运用,实现操作未完成时防止在次操作!
- 搭建android开发环境windown版
- NetLimiter
- 贴近windows的字体效果。fedora ubuntu等linux全系列版本适用