边双模板 在IDE上一直RE(连数据都读不进去) 人麻了
程序断点在
int uuu,vvv;
for(int i=1;i<=m;i++)
{
cin>>uuu>>vvv;
//cout<<uuu<<" "<<vvv<<"\n";
q[uuu].push_back(vvv);
q[vvv].push_back(uuu);
//cout<<i<<"\n";
}
// Problem: P3388 【模板】割点(割顶)
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P3388
// Memory Limit: 125 MB
// Time Limit: 1000 ms
//
// Powered by CP Editor (https://cpeditor.org)
#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
//#define int long long
#define ull unsigned long long
#define ll long long
#define MAXN 2019
#define WA puts("CCF\n");
#define eps 1e-5
#define ls i*2
#define rs i*2+1
#define none -1145141919
#define pii pair<int,int>
#define Y cout<<"Yes\n"
#define N cout<<"No\n"
#define H cout<<"\n"
//bool g[MAXN];
int dfn[MAXN],low[MAXN];
vector<int> q[MAXN];
int n,m;
vector<int> st;
vector<int> tot[MAXN];
int ans=0;
int clc;
void dfs(int p,int fa)
{
cout<<p<<" ";
dfn[p]=++clc;
low[p]=dfn[p];
st.push_back(p);
for(auto i:q[p])
{
if(i==fa) continue;
if(!dfn[i])
{
dfs(i,p);
low[p]=min(low[p],low[i]);
}
else
{
if(i!=fa&&dfn[i]<dfn[p])//back_edge
{
low[p]=min(low[p],dfn[i]);
}
}
}
if(low[p]==dfn[p])
{
ans++;
while(!st.empty())
{
int bk=st.back();
if(low[bk]==low[p])
{
tot[ans].push_back(bk);
}
else break;
}
}
return ;
}
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
/*ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);*/
memset(low,INF,sizeof(low));
cin>>n>>m;
//cout<<n<<"m"<<m;
//cout<<m<<"\n";
int uuu,vvv;
for(int i=1;i<=m;i++)
{
cin>>uuu>>vvv;
//cout<<uuu<<" "<<vvv<<"\n";
q[uuu].push_back(vvv);
q[vvv].push_back(uuu);
//cout<<i<<"\n";
}
//WA;
dfs(1,-1);
cout<<ans<<'\n';
for(int i=1;i<=ans;i++)
{
for(auto j:tot[i])
{
cout<<j<<" ";
}
H;
}
return 0;
}