http://codeforces.com/gym/101550/attachments

【AC】

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const int maxn=1e3+;
  5. const int maxq=1e4+;
  6. int n,m,q;
  7. struct node
  8. {
  9. int x1,y1;
  10. int x2,y2;
  11. }nd[maxq];
  12. int fir[maxn][maxn];
  13. bool vis[maxn][maxn];
  14. int fa[maxn*maxn];
  15. int id(int x,int y)
  16. {
  17. return (x-)*m+y;
  18. }
  19.  
  20. void init()
  21. {
  22. for(int i=;i<=n*m;i++) fa[i]=i;
  23. }
  24.  
  25. int getfa(int x)
  26. {
  27. return x==fa[x]?x:fa[x]=getfa(fa[x]);
  28. }
  29.  
  30. void mix(int x,int y)
  31. {
  32. int fx=getfa(x);
  33. int fy=getfa(y);
  34. if(fx^fy)
  35. {
  36. fa[fx]=fy;
  37. }
  38. }
  39. bool same(int x,int y)
  40. {
  41. return getfa(x)==getfa(y);
  42. }
  43. int dir[][]={{,},{-,},{,},{,-}};
  44. bool inside(int x,int y)
  45. {
  46. return x>=&&x<=n&&y>=&&y<=m;
  47. }
  48. int ans[maxq];
  49. int main()
  50. {
  51. while(~scanf("%d%d%d",&n,&m,&q))
  52. {
  53. memset(vis,false,sizeof(vis));
  54. memset(fir,,sizeof(fir));
  55. init();
  56. for(int i=;i<=q;i++)
  57. {
  58. scanf("%d%d%d%d",&nd[i].x1,&nd[i].y1,&nd[i].x2,&nd[i].y2);
  59. for(int j=nd[i].x1;j<=nd[i].x2;j++)
  60. {
  61. for(int k=nd[i].y1;k<=nd[i].y2;k++)
  62. {
  63. vis[j][k]=true;
  64. if(!fir[j][k]) fir[j][k]=i;
  65. }
  66. }
  67. }
  68. for(int i=;i<=n;i++)
  69. {
  70. for(int j=;j<=m;j++)
  71. {
  72. if(!vis[i][j]&&inside(i+,j)&&!vis[i+][j]) mix(id(i,j),id(i+,j));
  73. if(!vis[i][j]&&inside(i,j+)&&!vis[i][j+]) mix(id(i,j),id(i,j+));
  74. }
  75. }
  76. int cnt=;
  77. for(int i=;i<=n;i++)
  78. {
  79. for(int j=;j<=m;j++)
  80. {
  81. if(!vis[i][j]&&getfa(id(i,j))==id(i,j)) cnt++;
  82. }
  83. }
  84. for(int i=q;i>=;i--)
  85. {
  86. ans[i]=cnt;
  87. for(int x=nd[i].x1;x<=nd[i].x2;x++)
  88. {
  89. for(int y=nd[i].y1;y<=nd[i].y2;y++)
  90. {
  91. if(fir[x][y]==i)
  92. {
  93. vis[x][y]=false;
  94. cnt++;
  95. for(int mv=;mv<;mv++)
  96. {
  97. int xx=x+dir[mv][];
  98. int yy=y+dir[mv][];
  99. if(!inside(xx,yy)) continue;
  100. if(vis[xx][yy]) continue;
  101. if(!same(id(x,y),id(xx,yy)))
  102. {
  103. cnt--;
  104. mix(id(x,y),id(xx,yy));
  105. }
  106.  
  107. }
  108. }
  109. }
  110. }
  111. }
  112. for(int i=;i<=q;i++)
  113. {
  114. printf("%d\n",ans[i]);
  115. }
  116. }
  117. return ;
  118. }

【倒跑并查集维护连通块】NCPC 2016 A. Artwork的更多相关文章

  1. P1197 [JSOI2008]星球大战(并查集判断连通块+正难则反)

    P1197 [JSOI2008]星球大战(并查集判断连通块+正难则反) 并查集本来就是连一对不同父亲的节点就的话连通块就少一个. 题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统 ...

  2. C. Edgy Trees Codeforces Round #548 (Div. 2) 并查集求连通块

    C. Edgy Trees time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  3. BZOJ 1015: [JSOI2008]星球大战starwar(并查集求连通块+离线处理)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1015 题意: 思路:好题啊!!! 这道题目需要离线处理,先把所有要删的点给保存下来,然后逆序加点,这 ...

  4. [Codeforces 1027 F] Session in BSU [并查集维护二分图匹配问题]

    题面 传送门 思路 真是一道神奇的题目呢 题目本身可以转化为二分图匹配问题,要求右半部分选择的点的最大编号最小的一组完美匹配 注意到这里左边半部分有一个性质:每个点恰好连出两条边到右半部分 那么我们可 ...

  5. hihoCoder #1291 : Building in Sandbox 逆向处理+并查集维护

    /** 题目:#1291 : Building in Sandbox 链接:https://hihocoder.com/problemset/problem/1291 题意:就是一个三维的空间里,按照 ...

  6. Codeforces325 D【并查集维护连通性】

    参考:大牛blog 思路: 因为是环,所以可以复制一下图,先判断一下和他是不是和与他相邻的8个之一的一个障碍使得构成了一个环,环就是一个连通,用并查集维护即可: 如果没有就ans++,然后并把这个点加 ...

  7. 2019牛客暑期多校训练营(第八场)E:Explorer(LCT裸题 也可用线段树模拟并查集维护连通性)

    题意:给定N,M,然后给出M组信息(u,v,l,r),表示u到v有[l,r]范围的通行证有效.问有多少种通行证可以使得1和N连通. 思路:和bzoj魔法森林有点像,LCT维护最小生成树.  开始和队友 ...

  8. HDU 3018 Ant Trip (并查集求连通块数+欧拉回路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3018 题目大意:有n个点,m条边,人们希望走完所有的路,且每条道路只能走一遍.至少要将人们分成几组. ...

  9. 紫书 习题 11-12 UVa 1665 (并查集维护联通分量)

    这道题要逆向思维 反过来从大到小枚举, 就是在矩阵中一点一点加进去数字,这样比较 好操作, 如果正着做就要一点一点删除数字, 不好做. 我们需要在这个过程中维护联通块的个数, 这里用到了并查集. 首先 ...

随机推荐

  1. codevs 1277 生活大爆炸 2012年CCC加拿大高中生信息学奥赛

     时间限制: 1 s  空间限制: 128000 KB  题目等级 : 白银 Silver 题目描述 Description Sheldon and Leonard are physicists wh ...

  2. PHP开发基础视频教程

    PHP现今作为互联网运用很广泛的编程语言,市场需求量也越来越高,而PHP开发工程师的薪资也是一路水涨船高,更多的人看到了PHP的发展前景,纷纷都想投入到PHP的开发大军中来,那么对于很多转行或者零基础 ...

  3. org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'userId' not found. Available parameters are [arg1, arg0, param1, param2]

    2018-06-27 16:43:45.552  INFO 16932 --- [nio-8081-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : ...

  4. vue watch 监听

    1.普通的watch data() { return { frontPoints: 0 } }, watch: { frontPoints(newValue, oldValue) { console. ...

  5. webpack之postcss集成

    项目 为了 兼容各个浏览器,需要加各种 c3前缀,如果手动的加肯定 相对比较麻烦,但是现在有webpack,gulp之类的 工具可以自动给我们加上,可以说效率上加速不少.如果 配置中 做个happyp ...

  6. VC-基础:关于一些符号的意义

    GUI应用程序:Graphic User Interface图形 用户 接口 SDI:单文档程序(典型的记事本就是SDI) MID:多文档程序(比如VS2008默认就是多文档的)

  7. Java产生GUID

    /** * 产生GUID */public static final String generateGUID(){ UUID uuid = UUID.randomUUID(); return uuid ...

  8. Bootstrap历练实例:输入框组的大小

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  9. shell脚本,alias别名命令用法。

    [root@localhost ~]# alias alias cp='cp -i' alias mv='mv -i' alias rm='rm -i' [root@localhost ~]# [ro ...

  10. Apache Commons Configuration的应用

    Apache Commons Configuration的应用 Commons Configuration是一个java应用程序的配置管理工具.可以从properties或者xml文件中加载软件的配置 ...