Pagini recente » Cod sursa (job #2714413) | Cod sursa (job #140234) | Cod sursa (job #1449553) | Cod sursa (job #1863193) | Cod sursa (job #2123493)
#include <bits/stdc++.h>
using namespace std;
ifstream f("biconex.in");
ofstream g("biconex.out");
vector<int> l[100005],sol[100005];
vector<pair<int,int>> st;
int n,m,cod[100005],k,cv[100005],nrcv,viz[100005],low[100005],t[100005],niv[100005],r,nr;
void df(int i) {
int j,x,y;
viz[i]=1;
low[i]=niv[i];
for (j=0;j<l[i].size();j++) {
if (l[i][j]!=t[i] && niv[i]>niv[l[i][j]])
st.push_back(make_pair(i,l[i][j]));
if (!viz[l[i][j]]) {
niv[l[i][j]]=niv[i]+1;
t[l[i][j]]=i;
df(l[i][j]);
low[i]=min(low[i],low[l[i][j]]);
if (low[l[i][j]]>=niv[i]) {
nr++;
do {
x=st[st.size()-1].first;
y=st[st.size()-1].second;
sol[x].push_back(nr);
sol[y].push_back(nr);
st.pop_back();
} while((x!=i || y!=l[i][j]) && (x!=l[i][j] || y!=i));
}
}
else if (l[i][j]!=t[i])
low[i]=min(low[i],niv[l[i][j]]);
}
}
int main() {
int i,j,x,y;
f>>n>>m;
for (i=1;i<=m;i++) {
f>>x>>y;
l[x].push_back(y);
l[y].push_back(x);
}
r=1;
niv[1]=1;
df(1);
g<<nr<<'\n';
for (i=1;i<=nr;i++) {
for (j=1;j<=n;j++) {
x=0;
for (k=0;k<sol[j].size();k++)
if (sol[j][k]==i && x!=i) {
x=sol[j][k];
g<<j<<' ';
}
}
g<<'\n';
}
return 0;
}