社区讨论
92PTS求调互关码风整齐可以私信
P3388【模板】割点(割顶)参与者 3已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mjp4yum3
- 此快照首次捕获于
- 2025/12/28 10:54 2 个月前
- 此快照最后确认于
- 2025/12/31 18:05 2 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
int n,m;
int root;
vector<int> mp[20005];
int dfn[20005];
int low[20005];
int cnt;
int ans[20005];
int cntt;
void tarjan(int x)
{
dfn[x]=low[x]=++cnt;
int s=0;
// vis[x]=1;
for(int i=0;i<mp[x].size();i++)
{
if(!dfn[mp[x][i]])
{
s++;
tarjan(mp[x][i]);
low[x]=min(low[x],low[mp[x][i]]);
if(low[mp[x][i]]>=dfn[x] && x!=root)
{
// ans.push_back(x);
// cntt+=!ans[x];
ans[x]=1;
}
}
else
{
low[x]=min(low[x],dfn[mp[x][i]]);
}
}
if(s>1 && x==root)
{
// cnt+=!ans[x];
ans[x]=1;
}
return;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int u,v;
cin>>u>>v;
mp[u].push_back(v);
mp[v].push_back(u);
}
for(int i=1;i<=n;i++)
{
if(!dfn[i])
{
root=i;
tarjan(i);
}
}
// cout<<cntt<<endl;
for(int i=1;i<=n;i++)
{
if(ans[i])
{
cntt++;
}
}
cout<<cntt<<endl;
for(int i=1;i<=n;i++)
{
if(ans[i])
{
cout<<i<<" ";
}
}
return 0;
}
回复
共 3 条回复,欢迎继续交流。
正在加载回复...