有木有非常吊

加强

加强版   啊  ,看了都不敢做了   。后来先做了食物链这个我还是看过的。但还是A不掉,没明确神魔意思 。总而言之。大牛的博客是个好东西。我就那么看了一下,还是不懂怎莫办啊,哎,就那样就A掉了。

。。。

。。

今天我们来谈一下这个并查集的删除操作,依据我对大牛的理解啊,这个并查集的删除操作并非把原来的节点删除掉,而是用一个替身替掉,如今的这个点仅仅是用作桥梁的作用,即是没用的,del  ,,,del  ,。。。删除,那些被删掉的就从n開始给他们一个地址,然后即例如以下代码所看到的
比方说如上图。还没有并到5之前,要删除节点4。假设直接把4直接删除掉的话,那么4上的关系所有删除了。1,3就不在一个集合,可是还要他们在一个集合。那么就给4一个虚拟的节点,在接下来把虚拟节点就是1,3的父节点了,可是这样并非正确的,那么就在和5并起来的时候,把它们各自的虚拟节点并上去 。由于初始化的时候他们的虚拟节点也是他们本身。所以它们最后还是并到了一个集合。根节点还是5.有可能也是虚拟的节点。这都不重要,可是1,3的关系没有变。
假如已经变为上面的那个图了。把4删除掉之后。给他一个新的虚拟节点之后。可是他本身还在这边,相当于一个一个桥连接着。仅仅是他的父节点已经变了。可是其它的还在这里面。

也就是说已经成功的把它删除了,他已经属于还有一个集合了

下面是測试数据
5 6
M 0 1
M 1 2
M 1 3
S 1
M 1 2
S 3


#include <stdio.h>
#include <string.h>
#define N 100001
#define M 1000001
int par[N+M+50];
int repplace[N+50];
int flag[N+M];
int ind;
void init(int n )
{
for(int i=0;i<n;i++)
{
par[i]=i;
repplace[i]=i;
}
ind =n;
}
int findset(int n)
{
if(n==par[n])
return n;
else
return par[n]=findset(par[n]);
}
void unite(int n,int m)
{
int pn=findset(n);
int pm=findset(m);
if(pn!=pm)
par[pn]=pm;
}
void Delete(int n)//删除操作。
{
repplace[n]=ind;
par[ind]=ind;
ind++;
}
int main()
{
int a,b;
char s[3];
int x,y;
int cas=0;
while(scanf("%d%d",&a,&b)==2)//我一直纠结为什莫会WA。推断输入的控制条件错了
{
if(a==0&&b==0)
break;
init(a);
for(int i=0;i<b;i++)
{
scanf("%s",s);
if(s[0]=='M')
{
scanf("%d%d",&x,&y);
unite(repplace[x],repplace[y]);
}
else
{
scanf("%d",&x);
Delete(x);
}
}
memset(flag,0,sizeof(flag));
int ans=0;
for(int i=0;i<a;i++)//推断他们有几个集合
{
int hh=findset(repplace[i]);
if(!flag[hh])
{
flag[hh]=1;
ans++;
}
}
printf("Case #%d: %d\n",++cas,ans);
}
}

其他就不做介绍了,仅仅要会并查集的一般能看懂看懂。看不懂可评论。或发私信。。。

。。


Hdu 2473(并查集删除操作) Junk-Mail Filter的更多相关文章

  1. HDU2473 Junk-Mail Filter - 并查集删除操作(虚父节点)

    传送门 题意: 每次合并两份邮件,或者将某一份邮件独立出来,问最后有多少个邮件集合. 分析: 考虑初始化每个节点的祖先为一个虚父节点(i + n),虚父节点指向它自己.这样可以进行正常的合并操作. 而 ...

  2. hdu 2473 并查集

    思路:每次合并时,都是给一个虚拟的根. #include<map> #include<Set> #include<cmath> #include<queue& ...

  3. hdu 2473 并差集的删除操作

    虚拟数组 待定/.#include<iostream> #include<algorithm> #include<set> using namespace std; ...

  4. hdu 4514 并查集+树形dp

    湫湫系列故事——设计风景线 Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tot ...

  5. HDU 3926 并查集 图同构简单判断 STL

    给出两个图,问你是不是同构的... 直接通过并查集建图,暴力用SET判断下子节点个数就行了. /** @Date : 2017-09-22 16:13:42 * @FileName: HDU 3926 ...

  6. HDU 4496 并查集 逆向思维

    给你n个点m条边,保证已经是个连通图,问每次按顺序去掉给定的一条边,当前的连通块数量. 与其正过来思考当前这边会不会是桥,不如倒过来在n个点即n个连通块下建图,检查其连通性,就能知道个数了 /** @ ...

  7. HDU 2473 Junk-Mail Filter 并查集删除(FZU 2155盟国)

    http://acm.hdu.edu.cn/showproblem.php?pid=2473 http://acm.fzu.edu.cn/problem.php?pid=2155 题目大意: 编号0~ ...

  8. HDU 2473 Junk-Mail Filter 【并查集删除】

    Junk-Mail Filter Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  9. hdu2473 Junk-Mail Filter 并查集+删除节点+路径压缩

    Description Recognizing junk mails is a tough task. The method used here consists of two steps:  1) ...

随机推荐

  1. 146. LRU Cache

    题目: Design and implement a data structure for Least Recently Used (LRU) cache. It should support the ...

  2. 【HDOJ】1857 Word Puzzle

    trie树.以puzzle做trie树内存不够,从puzzle中直接找串应该会TLE.其实可以将查询组成trie树,离线做.扫描puzzle时注意仅三个方向即可. /* 1857 */ #includ ...

  3. 【HDOJ】4516 威威猫系列故事——因式分解

    可解的算法太多了,采用的算法是试x的值.注意题目的输入x^3-2x^2不会写成x^3+-2x^2.一直RE在这儿. /* 4516 */ #include <iostream> #incl ...

  4. c语言main函数的参数argc,argv说明

    main函数参数argc,argv说明   C/C++语言中的main函数,经常带有参数argc,argv,如下: int main(int argc, char** argv) int main(i ...

  5. ehcache基本原理

    ehcache是现在最流行的纯Java开源缓存框架,配置简单.结构清晰.功能强大,最初知道它,是从Hibernate的缓存开始的.网上中文的EhCache材料以简单介绍和配置方法居多,如果你有这方面的 ...

  6. haproxy配置直接重定向url

    在邮件列表看到有个人问haproxy能否在接到一个请求时选择一个后端服务器,然后301重定向url .主要原因是他有5个1G的出口,这样就能充分利用其带宽.测试了一下是可以的 frontend fre ...

  7. html input设置为只读属性

    有两种方式可以实现input的只读效果:disabled 和 readonly. 自然两种出来的效果都是只能读取不能编辑,可是两者有很大不同. Disabled说明该input无效,及其value不会 ...

  8. linux驱动程序之电源管理之linux的电源管理架构(3)

    设备电源管理 Copyright (c) 2010 Rafael J. Wysocki<rjw@sisk.pl>, Novell Inc. Copyright (c) 2010 Alan ...

  9. ksh和bash区别

    一.实践证明,在AIX上用的是ksh,linux上是bash sh或bsh,全名是bourne shell.它最早出现,是标准shell.后两者都兼容它. ksh和bash后续加入了历史记录,交互特性 ...

  10. BZOJ1901 - Dynamic Rankings(树状数组套主席树)

    题目大意 给定一个有N个数字的序列,然后又m个指令,指令种类只有两种,形式如下: Q l r k 要求你查询区间[l,r]第k小的数是哪个 C i t  要求你把第i个数修改为t 题解 动态的区间第k ...