比赛描述

给定一个无向图,一共n个点,请编写一个程序实现两种操作:

D x y 从原图中删除连接x,y节点的边。

Q x y 询问x,y节点是否连通

输入

第一行两个数n,m(5<=n<=100000,1<=m<=100000)

接下来m行,每行一对整数 x y (x,y<=n),表示x,y之间有边相连。保证没有重复的边。

接下来一行一个整数 q(q<=100000)

以下q行每行一种操作,保证不会有非法删除。

输出

按询问次序输出所有Q操作的回答,连通的回答C,不连通的回答D

样例输入

3 3
1 2
1 3
2 3
5
Q 1 2
D 1 2
Q 1 2
D 3 2
Q 1 2

样例输出

C
C
D

题目来源

NUAA

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<cstring>
  4. #include<map>
  5. #include<algorithm>
  6. #define M 100007
  7. using namespace std;
  8. int n,m,fa[M];
  9. char ans[M];
  10. struct node
  11. {
  12. int u, v;
  13. bool d;
  14. };node e[M],q[M];
  15. map<int, bool> hash;
  16. int Find(int x)
  17. {
  18. if(fa[x]==x)return x;
  19. return fa[x]=Find(fa[x]);
  20. }
  21. void Union(int a, int b)
  22. {
  23. int r1=Find(a);
  24. int r2=Find(b);
  25. if(r1!=r2) fa[r2]=r1;
  26. }
  27. int main()
  28. {
  29. for(int i=;i<=M;i++)fa[i]=i;
  30. scanf("%d%d",&n,&m);
  31. for(int i=;i<=m;i++)
  32. {
  33. scanf("%d%d",&e[i].u,&e[i].v);
  34. if(e[i].u>e[i].v)
  35. swap(e[i].u,e[i].v);
  36. }
  37. int qnum;
  38. scanf("%d",&qnum);
  39. for(int i=;i<=qnum;i++)
  40. {
  41. char f;
  42. cin>>f;
  43. scanf("%d%d",&q[i].u,&q[i].v);
  44. if(q[i].u>q[i].v)
  45. swap(q[i].u,q[i].v);
  46. if(f=='D')//将需要删除的边打上标记
  47. {
  48. q[i].d=true;
  49. hash[q[i].u*M+q[i].v]=true;
  50. }
  51. else q[i].d=false;
  52. }
  53. for(int i=;i<=m;i++)//合并不需要删除的边
  54. if(!hash[e[i].u*M+e[i].v])
  55. Union(e[i].u,e[i].v);
  56. int cnt=;
  57. for(int i=qnum;i>=;i--)//倒序操作
  58. {
  59. //将需要删除的边合并,因为在删除之前它是连通的
  60. if(q[i].d)Union(q[i].u,q[i].v);
  61. else
  62. {
  63. if(Find(q[i].u)==Find(q[i].v))
  64. ans[++cnt]='C';
  65. else
  66. ans[++cnt]='D';
  67. }
  68. }
  69. for(int i=cnt;i>=;i--)
  70. printf("%c\n", ans[i]);
  71. }

连通 OR 不连通(NOJ 1044)的更多相关文章

  1. codeforces 590C C. Three States(bfs+连通块之间的最短距离)

    题目链接: C. Three States time limit per test 5 seconds memory limit per test 512 megabytes input standa ...

  2. 图的割点 桥 双连通(byvoid)

    [点连通度与边连通度] 在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合.一个图的点连通度的定义为,最小割点集 ...

  3. ZOJ 3781 - Paint the Grid Reloaded - [DFS连通块缩点建图+BFS求深度][第11届浙江省赛F题]

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3781 Time Limit: 2 Seconds      Me ...

  4. UVA 10972 RevolC FaeLoN(边-双连通+缩点)

    很好的一道图论题,整整撸了一上午... 题意是给定一个无向图,要求将所有边变为有向边,求最少加入多少条有向边,使得该图强连通?这里先假设一个问题:给定一个无向子图,该子图具有怎样的性质才能使得将其无向 ...

  5. poj 3177 Redundant Paths(tarjan边双连通)

    题目链接:http://poj.org/problem?id=3177 题意:求最少加几条边使得没对点都有至少两条路互通. 题解:边双连通顾名思义,可以先求一下连通块显然连通块里的点都是双连通的,然后 ...

  6. UVA 572 -- Oil Deposits(DFS求连通块+种子填充算法)

    UVA 572 -- Oil Deposits(DFS求连通块) 图也有DFS和BFS遍历,由于DFS更好写,所以一般用DFS寻找连通块. 下述代码用一个二重循环来找到当前格子的相邻8个格子,也可用常 ...

  7. 最小生成树的Kruskal算法实现

    最近在复习数据结构,所以想起了之前做的一个最小生成树算法.用Kruskal算法实现的,结合堆排序可以复习回顾数据结构.现在写出来与大家分享. 最小生成树算法思想:书上说的是在一给定的无向图G = (V ...

  8. ACM知识点

    基础算法 高精 模拟 分治 贪心 排序 DFS 迭代加深搜索 BFS 双向BFS 动态规划 DAG上DP 树上DP 线性DP 图算法 最短路 FLYD DJATL BF 最大流 Dinic ISAP ...

  9. 【线段树】bzoj3995 [SDOI2015]道路修建

    线段树每个结点维护5个域: 整个区间的MST. 将两个左端点连通,两个右端点不连通,整个区间内选择2*(r-l+1)-2条边的最小生成森林,有两个连通块. 将两个右端点连通,两个左端点不连通,整个区间 ...

随机推荐

  1. js 双向绑定

    //双向绑定实例 <input name="" ng-bind-123="name" /> function DataBinder( object_ ...

  2. Python学习日志9月15日

    一周就要过去了,而我跟一周以前没什么区别.回想一下,我这周做了什么事情呢.恍然若失.这周的精力都浪费在很多不必要的事情上了.学过一片古文,讲后羿学射箭,他有一个同学跟他一样聪明,在一起学习.后羿呢,专 ...

  3. spring (由Rod Johnson创建的一个开源框架)

    你可能正在想“Spring不过是另外一个的framework”.当已经有许多开放源代码(和专有)J2EEframework时,我们为什么还需要Spring Framework? Spring是独特的, ...

  4. MIPS汇编程序设计——四则运算计算器

    实验目的 运用简单的MIPS实现一个能够整数加减乘除的计算器,同时使自己更加熟悉这些指令吧 MIPS代码 #sample example 'a small calculater’ # data sec ...

  5. linux虚拟机安装值得注意的几点

    1.建立新的虚拟机时选择自定义安装并选择稍后安装操作系统 2.关键安装命令 tar -xzvf  VMwareTools-10.0.6-3595377.tar.gz sudo ./wmware-ins ...

  6. 人脸识别源代码Open cv

    #include <stdio.h> #include <string.h> #include "cv.h" #include "cvaux.h& ...

  7. ios之UIPageControl

    分页控件是一种用来取代导航栏的可见指示器,方便手势直接翻页,最典型的应用便是iPhone的主屏幕,当图标过多会自动增加页面,在屏幕底部你会看到原点,用来只是当前页面,并且会随着翻页自动更新. 一.创建 ...

  8. [UVA] 704 Colour Hash

    所谓"周界搜索",练习搜索的好题,双向宽搜/迭代加深均可,还有很多细节有待完善,判重有比set更优的结构,宽搜还没写,先存一下. //Writer:GhostCai &&a ...

  9. 5.电影搜索之 自动填充,也叫autocomplete、搜索建议!

    什么叫自动填充,用过百度的应该都知道!当你输入关键词之后,会有一个下拉的候选列表,都是与你输入的内容相关的,这个就是自动填充的搜索建议.一般的搜索引擎或者站内搜索都会有这个功能. 今天分享下这个功能的 ...

  10. Python面向对象(成员)(二)

    1. 成员 在类中你能写的所有内容都是类的成员 2. 变量 1. 实例变量: 由对象去访问的变量. class Person: def __init__(self, name, id, gender, ...