题意:

N个邮件需要鉴别。

两种操作:

1. M X Y:X和Y是同一种邮件

2.S X:X被误判(意味着X要被它从属的那个集合“踢出去"而所有其它的邮件的关系保持不变)

问最后总共有几种邮件。

思路:

用并查集可以实现邮件的“合并”。但是要把单独的X“踢出去”,然后又要保证其它的关系不变。

弄个双层结构,第一层结构是用来描述邮件之前的关系的。第二层结构是用来指向第一层的结点。

第一层是fa,第二层是vfa。当X被“踢出去”时,只要在第一层中新加一个点,然后vfa[x]指向这个新结点即可。

既保留了原来的邮件之前的关系,又顺利地把X“踢出去”了。

代码:

  1. int n,m;
  2. int fa[1200005];
  3. int vfa[100005];
  4.  
  5. int findFa(int x){
  6. return fa[x]==x?fa[x]:fa[x]=findFa(fa[x]);
  7. }
  8.  
  9. int main(){
  10.  
  11. int T=0;
  12. while(scanf("%d%d",&n,&m),n||m){
  13. rep(i,1,n){
  14. fa[i]=i;
  15. vfa[i]=i;
  16. }
  17. int cn=n;
  18.  
  19. while(m--){
  20. char ope[5];
  21. scanf("%s",ope);
  22. if(ope[0]=='M'){
  23. int a,b;
  24. scanf("%d%d",&a,&b);
  25. int fx=findFa(vfa[a+1]);
  26. int fy=findFa(vfa[b+1]);
  27. if(fx!=fy){
  28. fa[fx]=fy;
  29. }
  30. }else{
  31. int x;
  32. scanf("%d",&x);
  33. vfa[x+1]=++cn;
  34. fa[cn]=cn;
  35. }
  36. }
  37. map<int,int> mp;
  38. mp.clear();
  39.  
  40. int ans=0;
  41.  
  42. rep(i,1,n){
  43. int t=findFa(vfa[i]);
  44. if(mp[t]==0){
  45. mp[t]=1;
  46. ++ans;
  47. }
  48. }
  49. printf("Case #%d: %d\n",++T,ans);
  50. }
  51.  
  52. return 0;
  53. }

hdu 2473 Junk-Mail Filter(并查集)的更多相关文章

  1. hdu 2473 Junk-Mail Filter (并查集之点的删除)

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

  2. HDU 2473 Junk-Mail Filter 并查集,虚拟删除操作

    http://acm.hdu.edu.cn/showproblem.php?pid=2473 给定两种操作 第一种是合并X Y 第二种是把X分离出来,就是从原来的集合中分离出来,其它的关系不变. 关键 ...

  3. HDU 2473 Junk-Mail Filter(并查集的删除操作)

    题目地址:pid=2473">HDU 2473 这题曾经碰到过,没做出来. .如今又做了做,还是没做出来. ... 这题涉及到并查集的删除操作.想到了设一个虚节点,可是我把虚节点设为了 ...

  4. 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~ ...

  5. HDU 2473 Junk-Mail Filter(并查集+删点,设立虚父节点/找个代理)

    题意:有N封邮件, 然后又两种操作,如果是M X Y , 表示X和Y是相同的邮件.如果是S X,那么表示对X的判断是错误的,X是不属于X当前所在的那个集合,要把X分离出来,让X变成单独的一个.最后问集 ...

  6. (step5.1.2)hdu 2473(Junk-Mail Filter——并查集)

    题目大意:输入两个整数n,m(n表示点的个数,m表示操作数).在接下来的m行中,对点的操作有两种 1)M a b . 表示将a.b并到一个集合中 2)S a .表示将a从原来的集合中去除,而成为一个单 ...

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

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

  8. HDU HDU1558 Segment set(并查集+判断线段相交)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1558 解题报告:首先如果两条线段有交点的话,这两条线段在一个集合内,如果a跟b在一个集合内,b跟c在一 ...

  9. hdu 1257 小希的迷宫 并查集

    小希的迷宫 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1272 D ...

  10. hdu 3635 Dragon Balls(并查集应用)

    Problem Description Five hundred years later, the number of dragon balls will increase unexpectedly, ...

随机推荐

  1. 通过Wireshark抓包分析谈谈DNS域名解析的那些事儿

    文/朱季谦 本文主要想通过动手实际分析一下是如何通过DNS服务器来解析域名获取对应IP地址的,毕竟,纸上得来终觉浅,绝知此事要躬行. 域名与IP地址 当在浏览器上敲下"www.baidu.c ...

  2. 学习了解PHP中的SeasLog日志扩展

    今天来学习的扩展是和日志相关的一个扩展,对于 PHP 的日志应用来说,除了本身自带的 error_log() . syslog() 之外,在大多数的框架中还会经常见到 monolog 的踪影.当然,我 ...

  3. requests接口自动化-列表与字典参数化

    def server_ip(): # 配置文件,通过修改配置,在不同环境进行测试 # dev_ip='https://www.baidu.com/' # sit_ip='https://cn.bing ...

  4. AVS 通信模块之AVSConnectionManager

    AVSConnectionManager 类为客户端无缝地管理与AVS的连接 功能简介 失败时连接重试 允许后续重新连接 ping管理 AVS服务器断开时周期重连服务器 允许客户端完全启用或禁用连接管 ...

  5. 使用Dom4j、反射自定义实现xml与java对象互转

    一.前言 国庆假期临近,工作动力不强.所以写几篇之前项目中自己用到的一些可能有用的东西分享出来. 今天分享的是Xml与javaBean互转的自定义实现. 先说几种我知道的Xml与javaBean互转的 ...

  6. Go语言之函数

    函数就是一块执行特定任务的代码,在输入源的基础上通过一些算法生成预期的输出. 一.函数的声明 Go 语言中的函数声明语法如下: func 函数名(参数名 类型,参数名 类型)(返回值1类型,返回值2类 ...

  7. AOJ/搜索与递归及分治法习题集

    ALDS1_4_A-LinearSearch. Description: You are given a sequence of n integers S and a sequence of diff ...

  8. 纯净Ubuntu16安装CUDA(9.1)和cuDNN

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  9. bzoj3073Journeys(线段树优化最短路)

    这里还是一道涉及到区间连边的问题. 如果暴力去做,那么就会爆炸 那么这时候就需要线段树来优化了. 因为是双向边 所以需要两颗线段树来分别对应入边和出边 QwQ然后做就好了咯 不过需要注意的是,这个边数 ...

  10. bzoj2037 Sue的小球(区间dp,考虑到对未来的贡献)

    ​​​​​​​​​​​​​​大致意思就是现在你要不断的奔跑到不同的地点去接球,每一秒可以移动一个单位长度,而你接到一个球的动作是瞬间的,收益是y[i]-t*v[i] 然后呢,要求分数最高. 起初看这个 ...