Pagini recente » Cod sursa (job #2397246) | Cod sursa (job #1642629) | Cod sursa (job #2319575) | Cod sursa (job #467839) | Cod sursa (job #718460)
Cod sursa(job #718460)
#include <cstdio>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;
#define nm 100100
FILE *f,*g;
vector <int> sol1, sol2,a[nm];
int mn[nm],lv[nm],bf[nm];
int n,m,lvl;
void read() {
int i,x,y;
f=fopen("pamant.in","r");
g=fopen("pamant.out","w");
fscanf(f,"%d%d",&n,&m);
for (i=1;i<=m;i++) {
fscanf(f,"%d%d",&x,&y);
a[x].push_back(y);
a[y].push_back(x);
}
}
void df(int x,int t) {
int i,j,st,dr;
lv[x]=mn[x]=++lvl;
for (i=0;i<a[x].size();i++) {
j=a[x][i];
if (j==t) continue;
if (lv[j] && lv[j]<lv[x]) mn[x]=min(mn[x],mn[j]);
if (!lv[j]) {
df(j,x);
mn[x]=min(mn[x],mn[j]);
if (mn[j]>=mn[x]) {
sol2.push_back(x);
}
}
}
}
void solve() {
int i;
for (i=1;i<=n;i++)
if (!lv[i]) {
sol1.push_back(i);
lvl=0;
df(i,0);
sol2.pop_back();
}
}
void write() {
int i;
fprintf(g,"%d\n",sol1.size());
for (i=0;i<sol1.size();i++) fprintf(g,"%d ",sol1[i]);
fprintf(g,"\n");
fprintf(g,"%d\n",sol2.size());
for (i=0;i<sol2.size();i++) fprintf(g,"%d ",sol2[i]);
}
int main () {
read();
solve();
write();
return 0;
}