【模板】割点(洛谷P3388)

摘要:
描述给出一个点和边的无向图,并找到图的切割点。向下输入每一行,表示有一条边。输出的第一行输出切割点的数量。第二行根据节点编号从小到大输出节点,用空格分隔。
Description

  给出一个(n)个点,(m)条边的无向图,求图的割点。

Input

  第一行输入(n),(m)
  下(m)行每行输入(x),(y)表示(x)(y)有一条边。

Output

  第一行输出割点个数。
  第二行按照节点编号从小到大输出节点,用空格隔开。

Solution
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=20000,M=200000;
int n,m,u,v,vis[N+10],cnt,cut[N+10],ans;
int head[N+10],nxt[M+10],vet[M+10],low[N+10],dfn[N+10];
inline int read()
{
	int ans=0;
	char ch=getchar();
	while (ch<'0' || ch>'9') ch=getchar();
	while (ch>='0' && ch<='9')
	{
		ans=ans*10+ch-'0';
		ch=getchar();
	}
	return ans;
}
void addedge(int u,int v)
{
	nxt[++cnt]=head[u];vet[cnt]=v;head[u]=cnt;
}
void tarjan(int u,int rt)
{
	vis[u]=1;low[u]=dfn[u]=++cnt;
	int child=0;
	for (int i=head[u];i;i=nxt[i])
	{
		int v=vet[i];
		if (!vis[v])
		{
			tarjan(v,rt);child++;
			low[u]=min(low[u],low[v]);
			if (low[v]>=dfn[u] && u!=rt) ans+=cut[u]?0:1,cut[u]=1;
			if (child>=2 && u==rt) ans+=cut[u]?0:1,cut[u]=1;
		}
		else low[u]=min(low[u],dfn[v]);
	}
}
int main()
{
	n=read(),m=read();
	for (int i=1;i<=m;i++)
	{
		int u=read(),v=read();
		addedge(u,v);
		addedge(v,u);
	}
	for (int i=1;i<=n;i++)
		if (!vis[i]) tarjan(i,i);
	printf("%d
",ans);
	for (int i=1;i<=n;i++)
		if (cut[i]) printf("%d ",i);
	printf("
");
	return 0;
}

免责声明:文章转载自《【模板】割点(洛谷P3388)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇如何区分cpu_scale、max_freq_scale、cpu_orig_capacity、cpu_capacity?天气预报APP(2)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

计算显卡对比

科学计算显卡的几个主要性能指标:1.计算能力:每秒FLOPS浮点运算,TFLOPS代表每秒万亿次浮点运算;2.计算性能:3.视频内存大小:视频内存大小还决定了可以用于实验的样本数量和模型的复杂性。...

docker安装宝塔

主机的/home/www文件夹映射到docker容器的/www(注意:如果文件目录不存在,特权意味着在运行容器时,容器被授予特权,容器有权写入文件。然后问题来了……安装完成后,如果重新启动容器,容器宝塔会丢失吗?不,让我们试试:...

微信小程序中使用Vant Weapp的ActionSheet上拉菜单出现的样式问题

以下修改的源码均在action-sheet组件中。在index.wxss:2.下方的取消按钮不居中,通过审查元素发现它的宽带已经超出了手机屏幕的宽度,出现的滚动条导致的,具体什么原因导致暂时不知,解决方案是给.van-action-sheet__cancel添加样式box-sizing:border-box可解决。在index.wxss:.van-actio...

Android:在任务列表隐藏最近打开的app

//schemas.android.com/apk/res/android“package=”com.li.test“android:versionName=”1.0“&gt:targetSdkVersion=”23“/&gt:allowBackup=”true“android:icon=”@mipmap/ic_launcher“androi...

动态表单

在完成数据表元数据的维护后,关键点是生成表单。表单生成主要基于上表,该表记录了类型、长度、字段是否可以为空、界面显示方法以及表单何时生成等一系列信息。用这个生成表单并不难,嗯,有句话说得好,“困难的事情必须容易完成”。最后,最困难的事情是由一些简单的问题组成的。由于现在使用了struts 2,因此需要对接口进行一系列判断,代码如下:˂s:iftest='#f...

64/32位oracle客户端安装配置详细教程

如何连接远程oracle数据库?.点击完成,正式安装产品…如何实验安装是否可用?...