题目链接

考虑正序去除点去掉其所有连边十分复杂,可以倒序离线处理,每次新建一个点,连接其连边,用并查集统计联通块的个数。

附代码

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. using namespace std;
  5. const int MAXN=400000+5;
  6. int ans[MAXN],fa[MAXN],rnk[MAXN],hd[MAXN],des[MAXN];
  7. int ff[MAXN],tt[MAXN];
  8. int to[MAXN<<1],nxt[MAXN<<1];
  9. bool used[MAXN];
  10. int cnt,n,m;
  11. inline void build(int f,int t)
  12. {
  13. to[++cnt]=t;
  14. nxt[cnt]=hd[f];
  15. hd[f]=cnt;
  16. }
  17. int find(int x)
  18. {
  19. return fa[x]==x?x:fa[x]=find(fa[x]);
  20. }
  21. bool unite(int x,int y)
  22. {
  23. x=find(x),y=find(y);
  24. if(x==y) return 0;
  25. if(rnk[x]==rnk[y])
  26. fa[x]=y,++rnk[y];
  27. else if(rnk[x]>rnk[y])
  28. fa[y]=x;
  29. else
  30. fa[x]=y;
  31. return 1;
  32. }
  33. int main()
  34. {
  35. int x,y;
  36. scanf("%d%d",&n,&m);
  37. for(int i=0;i<=n;++i)
  38. fa[i]=i;
  39. for(int i=1;i<=m;++i)
  40. {
  41. scanf("%d%d",&ff[i],&tt[i]);
  42. build(ff[i],tt[i]);
  43. build(tt[i],ff[i]);
  44. }
  45. int k;
  46. scanf("%d",&k);
  47. for(int i=1;i<=k;++i)
  48. scanf("%d",&des[i]),
  49. used[des[i]]=1;
  50. int ansn=n-k;
  51. for(int i=1;i<=m;++i)
  52. {
  53. if(!used[ff[i]]&&!used[tt[i]])
  54. {
  55. if(unite(ff[i],tt[i]))
  56. --ansn;
  57. }
  58. }
  59. for(int j=k;j>=1;--j)
  60. {
  61. ans[j]=ansn;
  62. ++ansn;
  63. int u=des[j];
  64. used[u]=0;
  65. for(int i=hd[u];i;i=nxt[i])
  66. {
  67. int v=to[i];
  68. if(used[v]) continue;
  69. if(unite(u,v))
  70. --ansn;
  71. }
  72. }
  73. printf("%d\n",ansn);
  74. for(int i=1;i<=k;++i)
  75. printf("%d\n",ans[i]);
  76. return 0;
  77. }

BZOJ1015[JSOI2008]星球大战starwar题解报告的更多相关文章

  1. BZOJ1015[JSOI2008]星球大战starwar[并查集]

    1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 5253  Solved: 2395[Submit ...

  2. [Bzoj1015][JSOI2008]星球大战starwar(并查集)(离线处理)

    1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 6849  Solved: 3204[Submit ...

  3. BZOJ1015 [JSOI2008]星球大战starwar(并查集)

    1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 3895  Solved: 1750[Submit ...

  4. BZOJ1015 [JSOI2008]星球大战starwar

    Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的 机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通 ...

  5. [洛谷P1197/BZOJ1015][JSOI2008]星球大战Starwar - 并查集,离线,联通块

    Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过 ...

  6. 2018.09.26 bzoj1015: [JSOI2008]星球大战starwar(并查集)

    传送门 并查集经典题目. 传统题都是把删边变成倒着加边,这道题是需要倒着加点. 处理方法是将每个点与其他点的边用一个vector存起来,加点时用并查集统计答案就行了. 代码: #include< ...

  7. [bzoj1015](JSOI2008)星球大战 starwar(离线+并查集)

    Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武 器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通 ...

  8. BZOJ1015: [JSOI2008]星球大战starwar【并查集】【傻逼题】

    Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过 ...

  9. bzoj1015: [JSOI2008]星球大战starwar 并查集+离线处理

    题目传送门 这道题可以改为离线处理 倒着找答案 这样删点就变成加点了 有了这个思想题目就很好写了哇 23333 #include<cstdio> #include<cstring&g ...

随机推荐

  1. 剑指offer-面试题10-斐波那契数列-递归循环

    /* 题目:求斐波那契数列的第n项 */ /* 思路: f(n) = 0 n=0, 1 n=1, f(n-1) + f(n-2) n>1 */ int Fibonacci(int n){ if( ...

  2. Local changes were not restore

    问题是这样的: 更新代码的时候出现这个弹框,不能更新最新代码 解决如下: 直接点击Clear [注意:这个操作是放弃本地所有的修改,如果要找回代码千万不要点击] 再点击Apply Stash  就可以 ...

  3. [SDOI2009]晨跑[最小费用最大流]

    [SDOI2009]晨跑 最小费用最大流的板子题吧 令 \(i'=i+n\) \(i -> i'\) 建一条流量为1费用为0的边这样就不会对答案有贡献 其次是对 \(m\) 条边建 \(u'-& ...

  4. CTF伪协议+preg_replace()函数的代码执行

    一道学习中所遇到的ctf 步骤: 我们点击题目链接,然后在页面先点击”云平台后台管理中心“ 然后url后面跟了参数page,题目提示了一个文件包含,我们试试index.php 看到了输出了ok,应该是 ...

  5. [HNOI2009]图的同构记数

    题意 在所以置换下,本质不同的\(n\)阶图个数 做法 可以假想成\(K_n\),边有黑白两色,黑边存在于原图,白边存在于补图 由于\(n\le 60\),可以手算出拆分数不大,所以我们爆搜置换群 对 ...

  6. PAT (Basic Level) Practice (中文)1016 部分A+B (15 分)

    正整数 A 的“D​A​​(为 1 位整数)部分”定义为由 A 中所有 D​A​​ 组成的新整数 P​A​​.例如:给定 8,D​A​​=6,则 A 的“6 部分”P​A​​ 是 66,因为 A 中有 ...

  7. 51Nod 1183 编辑距离 (字符串相似算法)

    编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数.许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除 ...

  8. PHP 冷知识

    1,执行Linux命令 <?php $a =`ls -a /`; // execute linux command echo '<pre>'.$a; 2.为变量起别名 <?ph ...

  9. mysql常用函数及关键字汇总

    关键字 1...mysql包含之in SELECT count(1) as count FROM 表名 a,表名 b WHERE a.主键 = b.外键  and a.字段 in('1','2,'3' ...

  10. json 的key值不能是变量

    var _key = name; var _value = 2; var params = { _key :_ value } _key 为变量 console.log(params); { _key ...