Pagini recente » Cod sursa (job #1293288) | Cod sursa (job #2271828) | Cod sursa (job #1094783) | Cod sursa (job #274633) | Cod sursa (job #1134200)
#include <cstdio>
#include <vector>
using namespace std;
vector <int> g[nmax];
vector <int> r;
int niv[nmax];
int low[nmax];
bool viz[nmax];
int n,m,snr;
void afisaza(int start) {
viz[start] = true;
printf("%d ",start);
for (vector <int> :: iterator it = g[start].begin();it != g[start].end();it++) {
if (!viz[*it]) afisaza(*it);
}
}
int dfs(int start) {
viz[start] = true;
int lowest = nmax+1;
for (vector <int> :: iterator it = g[start].begin();it != g[start].end();it++) {
if (viz[*it]) {
lowest = minim(lowest,niv[*it]);
continue;
}
if (start == 1) snr++;
niv[*it] = niv[start] +1;
low[start] = dfs(*it);
}
return lowest;
}
int main() {
freopen("biconex.in","r",stdin);
freopen("biconex.ut","w",stdout);
scanf("%d %d",&n,&m);
for (int i=1;i<=m;i++) {
int a,b;
scanf("%d %d",&a,&b);
g[a].push_back(b);
g[b].push_back(a);
}
niv[1] = 1;
dfs(1);
if (snr > 1) r.push_back(1);
for (int i=2;i<=n;i++) {
for (vector <int> :: iterator it = g[i].begin();it != g[i].end();it++) {
if (low[i] != low[*it]) r.push_back(i);
}
}
printf("%d\n",r.size()+1);
for (int i=1;i<=n;i++) viz[i] = false;
for (vector <int> :: iterator it = r.begin();it != r.end();it++) viz[*it] = true;
for (int i=1;i<=n;i++) {
if (!viz[i]) afisaza(i);
printf("\n");
}
return 0;
}