题目链接

思路

真板子题。割点是指在一个无向图中,删去之后图将不再连通的点。可以用tarjan算法求。根据割点有两种情况,一种是根,一种是非根。如果不是根的就去判断在tarjan的时候当前节点所能到的最靠上的点。如果最靠上的点在当前点的下面,那么当前点就是割点,否则不是。对于是根的点。只要判断是不是可以从儿子中搜两遍就可以了。

代码

  1. #include<cstdio>
  2. #include<iostream>
  3. #define fi(s) freopen(s,"r",stdin);
  4. #define fo(s) freopen(s,"w",stdout);
  5. using namespace std;
  6. typedef long long ll;
  7. const int N = 20000 + 100,M = 100000+100;
  8. ll read() {
  9. ll x = 0,f = 1;char c = getchar();
  10. while(c < '0' || c > '9') {
  11. if(c == '-') f = -1;
  12. c = getchar();
  13. }
  14. while(c >= '0' && c <= '9') {
  15. x = x * 10 + c - '0';
  16. c = getchar();
  17. }
  18. return x * f;
  19. }
  20. struct node {
  21. int v,nxt;
  22. }e[M * 2];
  23. int ejs,head[N],dfn[N],low[N],ans[N];
  24. void add(int u,int v) {
  25. e[++ejs].v = v;e[ejs].nxt = head[u]; head[u] = ejs;
  26. }
  27. int now;
  28. int js;
  29. int rd;
  30. void tarjan(int u) {
  31. int rd = 0;
  32. low[u] = dfn[u] = ++js;
  33. for(int i = head[u]; i; i = e[i].nxt) {
  34. int v = e[i].v;
  35. if(!dfn[v]) {
  36. tarjan(v);
  37. if(u == now)
  38. rd++;
  39. low[u] = min(low[u],low[v]);
  40. if(low[v] >= dfn[u] && u != now) ans[u] = 1;//!!!
  41. }
  42. else low[u] = min(low[u],dfn[v]);
  43. }
  44. if(rd >= 2 && u == now ) ans[u] = 1;
  45. return;
  46. }
  47. int main() {
  48. int n = read(), m = read();
  49. for(int i = 1;i <= m;++i) {
  50. int u = read(), v = read();
  51. add(u,v); add(v,u);
  52. }
  53. for(int i = 1;i <= n;++i) {
  54. if(!dfn[i]) {
  55. now = i;
  56. tarjan(i);
  57. }
  58. }
  59. int tot = 0;
  60. for(int i =1; i <= n;++i)
  61. if(ans[i]) tot++;
  62. printf("%d\n",tot);
  63. for(int i = 1; i <= n;++i)
  64. if(ans[i]) printf("%d ",i);
  65. return 0;
  66. }

一言

心上有个人,才能活下去。 ——病相笔记

[luogu3388][割点]的更多相关文章

  1. luogu3388 【模板】割点(割顶)

    模板题 #include <iostream> #include <cstdio> using namespace std; struct Edge{ int too, nxt ...

  2. HDU4738 tarjan割边|割边、割点模板

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=4738 坑点: 处理重边 图可能不连通,要输出0 若求出的结果是0,则要输出1,因为最少要派一个人 #inc ...

  3. ACM/ICPC 之 Dinic+枚举最小割点集(可做模板)(POJ1815)

    最小割的好题,可用作模板. //Dinic+枚举字典序最小的最小割点集 //Time:1032Ms Memory:1492K #include<iostream> #include< ...

  4. 洛谷P3388 【模板】割点

    给出一个n个点,m条边的无向图,求图的割点. u是cut vertex的两个条件: 1.存在v使v及其所有后代没有反向边连回u的祖先 2.u是根且有两个以上子节点 dfs一遍 low[u]是u及其后代 ...

  5. 【UOJ#67】新年的毒瘤 Tarjan 割点

    #67. 新年的毒瘤 UOJ直接黏贴会炸...    还是戳这里吧: http://uoj.ac/problem/67#tab-statement Solution 看到这题的标签就进来看了一眼. 想 ...

  6. hihoCoder 1183 连通性一·割边与割点(Tarjan求割点与割边)

    #1183 : 连通性一·割边与割点 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 还记得上次小Hi和小Ho学校被黑客攻击的事情么,那一次攻击最后造成了学校网络数据的丢 ...

  7. {part1}DFN+LOW(tarjan)割点

    什么是jarjan? 1)求割点 定义:在无向连通图中,如果去掉一个点/边,剩下的点之间不连通,那么这个点/边就被称为割点/边(或割顶/桥). 意义:由于割点和割边涉及到图的连通性,所以快速地求出割点 ...

  8. 图的割点 | | jzoj【P1230】 | | gdoi | |备用交换机

    写在前面:我真的不知道图的割点是什么.... 看见ftp图论专题里面有个dfnlow的一个文档,于是怀着好奇的心情打开了这个罪恶的word文档,,然后就开始漫长的P1230的征讨战.... 图的割点是 ...

  9. 割点和桥---Tarjan算法

    使用Tarjan算法求解图的割点和桥. 1.割点 主要的算法结构就是DFS,一个点是割点,当且仅当以下两种情况:         (1)该节点是根节点,且有两棵以上的子树;         (2)该节 ...

随机推荐

  1. 使用npm安装一些包失败了,更换npm源

    镜像使用方法(三种办法任意一种都能解决问题,建议使用第三种,将配置写死,下次用的时候配置还在): 1.通过config命令 npm config set registry https://regist ...

  2. .Net在操作mysql查询的时候出现“: Unknown column 'UserName' in 'where clause'”错误

    今天使用.Net操作mysql查询的时候,如果加上条件查询的时候就会出现 Unknown column 'UserName' in 'where clause'这个错,不加条件直接select * f ...

  3. ajax设置默认值ajaxSetup()方法

    $(function(){ //设置全局 jQuery Ajax全局参数 $.ajaxSetup({ type:"POST", async:false, cache:false, ...

  4. 转:Flutter Decoration背景设定(边框、圆角、阴影、形状、渐变、背景图像等)

    1 继续关系: BoxDecoration:实现边框.圆角.阴影.形状.渐变.背景图像 ShapeDecoration:实现四个边分别指定颜色和宽度.底部线.矩形边色.圆形边色.体育场(竖向椭圆).  ...

  5. Linux 系统命令行入门基础

    Linux 命令行组成结构 打包及压缩命令 tar 解压压缩包:

  6. 阿里p3c(代码规范,eclipse插件、模版,idea插件)

    阿里p3c 一.说明 代码规范检查插件p3c,是根据<阿里巴巴Java开发手册>转化而成的自动化插件. (高级黑:P-3C“Orion”,反潜巡逻机,阿里大概取p3c先进,监测,发现潜在问 ...

  7. docker 列出每个容器的IP

    抄来的...找不到出处了.   常用方法有两种 docker inspect 容器ID | grep IPAddress 方法二 查看docker name: sudo docker inspect ...

  8. timestamp 与 nonce 防止重放攻击

    重放攻击是计算机世界黑客常用的攻击方式之一,所谓重放攻击就是攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程. 首先要明确一个事情,重放攻击是二次请求,黑客通过抓包获取到 ...

  9. 在delphi中生成GUID

    什么是 GUID ? 全球唯一标识符 (GUID) 是一个字母数字标识符,用于指示产品的唯一性安装.在许多流行软件应用程序(例如 Web 浏览器和媒体播放器)中,都使用 GUID. GUID 的格式为 ...

  10. js写插件教程入门

    原文地址:https://github.com/lianxiaozhuang/blog 转载请注明出处   1. 点击add可以添加个自input的内容到div里并实现变颜色 <div id=& ...