Pagini recente » Cod sursa (job #2348464) | Cod sursa (job #2531453) | Cod sursa (job #193058) | Cod sursa (job #767958) | Cod sursa (job #2223213)
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
const int NMAX=100000;
vector <int> G[NMAX];
int dfsRoot,rootChildren;
int artNr=0;
int idx[NMAX],low[NMAX],parent[NMAX];
bool ap[NMAX];
int g=0;
void dfs(int u){
++g;
idx[u]=low[u]=g;
for(int i=0; i<G[u].size(); ++i){
int v=G[u][i];
if(idx[v]==0){
parent[v]=u;
if(u==dfsRoot)
++rootChildren;
dfs(v);
if(low[v]>=idx[u])
ap[u]=1;
low[u]=min(low[v],low[u]);
}
else{
if(v!=parent[u])
low[u]=min(low[u],idx[v]);
}
}
}
int main()
{
freopen("pamant.in","r",stdin);
freopen("pamant.out","w",stdout);
int n,m;
int u,v;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i)
parent[i]=-1;
for(int i=1;i<=m;++i){
scanf("%d%d",&u,&v);
G[u].push_back(v);
G[v].push_back(u);
}
int convex=0;
int convexValues[NMAX];
for(int i=1;i<=n;++i)
if(idx[i]==0){
++convex;
convexValues[convex]=i;
dfs(i);
dfsRoot=i;
rootChildren=0;
ap[i]=(rootChildren>1);
}
printf("%d\n",convex);
for(int i=1;i<=convex;++i)
printf("%d ",convexValues[i]);
printf("\n");
for(int i=1;i<=n;++i)
if(ap[i]==1)
++artNr;
printf("%d\n",artNr);
for(int i=1;i<=n;++i)
if(ap[i]==1)
printf("%d ",i);
return 0;
}