luogu 3388 【模板】割点(割顶)
2024-09-05 10:26:20
点双。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#include<vector>
#define ll long long
#define inf 2139062143
#define MAXN 100100
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-;ch=getchar();}
while(isdigit(ch)) {x=x*+ch-'';ch=getchar();}
return x*f;
}
int n,m,res,stp,cnt,fst[MAXN],to[MAXN<<],nxt[MAXN<<],dfn[MAXN],low[MAXN],ans[MAXN];
void add(int u,int v) {nxt[++cnt]=fst[u],fst[u]=cnt,to[cnt]=v;}
void tarjan(int x,int anc)
{
dfn[x]=low[x]=++stp;int rts=;
for(int i=fst[x];i;i=nxt[i])
{
if(!dfn[to[i]])
{
tarjan(to[i],anc);
low[x]=min(low[x],low[to[i]]);
if(low[to[i]]>=dfn[x]&&x!=anc) ans[x]=;
if(x==anc) rts++;
}
low[x]=min(low[x],dfn[to[i]]);
}
if(x==anc&&rts>) ans[anc]=;
}
int main()
{
n=read(),m=read();int a,b;
for(int i=;i<=m;i++) {a=read(),b=read();add(a,b);add(b,a);}
for(int i=;i<=n;i++) if(!dfn[i]) tarjan(i,i);
for(int i=;i<=n;i++) if(ans[i]) res++;printf("%d\n",res);
for(int i=;i<=n;i++) if(ans[i]) printf("%d ",i);
}
最新文章
- 浩瀚技术团队... 安卓智能POS移动PDA开单器 开单器 进销存系统 进销存系统
- MacBook下如何安装mysql-python
- centos搭建SVN三部曲
- 如何在mac上安装gradle
- jQuery使用ajax跨域获取数据
- line-height让文本在块级元素中居中显示总结
- WARNING: Calls to any function that may require a gradient calculation inside a conditional block may return undefined results
- CSS的魔法和魅力
- 使用IO流创建文件并写入数据
- jquery.dataTables插件使用例子详解
- 获取EXe版本信息
- jsonp使用规范
- ToString() 格式化
- Java编程风格学习(三)
- Java迭代器Iterator
- kubeadm 安装1.6.0版本出错 未解决
- xml的SAX解析规则
- The first day in cnblogs
- C/C++ 打开串口和关闭串口
- [小tips]使用vscode,根据vue模板文件生成代码
热门文章
- python3.x Day5 面向对象
- Python之粘包
- 02--Activiti初始化表
- noi.ac NOIP2018 全国热身赛 第二场 T3 color
- POJ 2718 Smallest Difference(贪心 or next_permutation暴力枚举)
- ECNU 3260 袋鼠妈妈找孩子(dfs)
- webstrom破解-webstrom2018.2.4破解方法(xjl456852原创)
- 開啟活動監視器 (SQL Server Management Studio)
- 如何使用Mysql Workbench导出一整个sql文件,sql包?
- 【springmvc】传值的几种方式&;&;postman接口测试