当前位置: 首页 > news >正文

洛谷 P3388 【模板】割点(割顶)题解

今天学了割点,就A了这道板子,比较难理解的地方就在于如果是根节点就要找两个点来满足low[y]>=dfn[x],如果不是就只需找一个点来满足。Tarjan(i,i)中第一个i是开始搜索的点而第

二个i代表根节点,就是这棵搜索树的根,虽然一开始值是一样的,但x是要随着搜索向下找的,而根节点在搜索过程中不变。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #define maxn 100010
 6 #define maxm 500010
 7 using namespace std;
 8 inline int read() 
 9 {
10     int x=0;
11     bool f=1;
12     char c=getchar();
13     for(; !isdigit(c); c=getchar()) if(c=='-') f=0;
14     for(; isdigit(c); c=getchar()) x=(x<<3)+(x<<1)+c-'0';
15     if(f) return x;
16     return 0-x;
17 }
18 inline void write(int x)
19 {
20     if(x<0){putchar('-');x=-x;}
21     if(x>9)write(x/10);
22     putchar(x%10+'0');
23 }
24 struct node 
25 {
26     int to,nex;
27 }edge[2*maxm];
28 int dfn[maxn],low[maxn],st[maxn],inn[maxn],head[maxm],ans[maxn];
29 int n,m,cnt,res,num;
30 inline void add(int u,int v)
31 {
32     cnt++;
33     edge[cnt].to=v;
34     edge[cnt].nex=head[u];
35     head[u]=cnt;
36 }
37 inline void Tarjan(int x,int root)
38 {
39     dfn[x]=low[x]=++num;
40     int flag=0;
41     for(int i=head[x];i!=-1;i=edge[i].nex)
42     {
43         int y=edge[i].to;
44         if(!dfn[y])
45         {
46             Tarjan(y,root);
47             low[x]=min(low[x],low[y]);
48             if(low[y]>=dfn[x]&&x!=root) ans[x]=true;
49             if(x==root) flag++;
50         }
51         else low[x]=min(low[x],dfn[y]);
52     }
53     if(x==root&&flag>=2) ans[root]=true;
54 }
55 int main()
56 {
57     memset(head,-1,sizeof(head));
58     n=read();m=read();
59     for(int i=1;i<=m;i++)
60     {
61         int u,v;
62         u=read();v=read();
63         add(u,v);
64         add(v,u);
65     }
66     for(int i=1;i<=n;i++)
67         if(!dfn[i])
68             Tarjan(i,i);
69     for(int i=1;i<=n;i++)
70         if(ans[i])
71             res++;
72     write(res);
73     printf("\n");
74     for(int i=1;i<=n;i++)
75         if(ans[i])
76         {
77             write(i);
78             printf(" ");
79         }
80     return 0;
81 }
请各位大佬斧正(反正我不认识斧正是什么意思)

 

转载于:https://www.cnblogs.com/handsome-zyc/p/11237735.html

相关文章:

  • 大型网站的监控、报警与故障转移
  • mjpg-streamer译文
  • 一起谈.NET技术,.NET Framework源码研究系列之---Delegate
  • gnu下的arm汇编伪指令:.word说明
  • re
  • python循环语句
  • DHCP中继
  • docker
  • 为何投奔BSD
  • 如何查看linux系统安装时间
  • Win XP多用户管理-单机多用户+网络多用户
  • github廖雪峰git
  • sql笔试
  • 一起谈.NET技术,在Mono 2.8上部署ASP.NET MVC 2
  • 设计模式的征途—15.观察者(Observer)模式
  • 《Java编程思想》读书笔记-对象导论
  • ➹使用webpack配置多页面应用(MPA)
  • ES6--对象的扩展
  • JavaScript设计模式系列一:工厂模式
  • js中forEach回调同异步问题
  • Laravel Mix运行时关于es2015报错解决方案
  • Linux gpio口使用方法
  • spring boot 整合mybatis 无法输出sql的问题
  • vue总结
  • 创建一种深思熟虑的文化
  • 汉诺塔算法
  • 简单易用的leetcode开发测试工具(npm)
  • 容器服务kubernetes弹性伸缩高级用法
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 一起参Ember.js讨论、问答社区。
  • 用mpvue开发微信小程序
  • 主流的CSS水平和垂直居中技术大全
  • PostgreSQL之连接数修改
  • 阿里云服务器购买完整流程
  • 阿里云重庆大学大数据训练营落地分享
  • 通过调用文摘列表API获取文摘
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (转)Sublime Text3配置Lua运行环境
  • (转)编辑寄语:因为爱心,所以美丽
  • (转)德国人的记事本
  • (转)四层和七层负载均衡的区别
  • .NET Core Web APi类库如何内嵌运行?
  • .NET 事件模型教程(二)
  • .Net中的设计模式——Factory Method模式
  • .project文件
  • @staticmethod和@classmethod的作用与区别
  • [ 转载 ] SharePoint 资料
  • [<事务专题>]
  • [2009][note]构成理想导体超材料的有源THz欺骗表面等离子激元开关——
  • [AR Foundation] 人脸检测的流程
  • [C#]科学计数法(scientific notation)显示为正常数字
  • [C#基础知识]专题十三:全面解析对象集合初始化器、匿名类型和隐式类型