Pagini recente » Cod sursa (job #2685922) | Cod sursa (job #674871) | Cod sursa (job #2916863) | Cod sursa (job #2749333) | Cod sursa (job #2558393)
#include <fstream>
using namespace std;
ifstream fin ("ctc.in");
ofstream fout ("ctc.out");
const int N = 1e5 + 5;
struct nod
{
int et;
nod* adr;
}*L[N],*M[N], *K[N];
int viz[N], v[N], ctc[N];
void citire()
{
int x,y;
while(fin>>x>>y)
{
nod* p=new nod;
p->et=y;
p->adr=L[x];
L[x]=p;
p=new nod;
p->et=x;
p->adr=M[y];
M[y]=p;
}
}
void dfs(int Nod, int k)
{
viz[Nod]=k;
for(nod* a = L[Nod];a!=NULL;a=a->adr)
if(viz[a->et]!=k)
dfs(a->et, k);
}
void df(int Nod, int k)
{
v[Nod]=k;
if (viz[Nod] == k && v[Nod] == k) {
ctc[Nod] = k;
}
for(nod* a=M[Nod];a!=NULL;a=a->adr) {
if (v[a->et] != k)
df(a->et, k);
}
}
int main() {
int n,m, k = 0;
fin >> n >> m;
citire();
for(int i=1;i<=n;i++) {
if(ctc[i]==0) {
++k;
dfs(i, k);
df(i, k);
}
}
fout << k << '\n';
for(int i=1;i<=n;i++) {
nod *p=new nod;
p->et=i;
p->adr=K[ctc[i]];
K[ctc[i]]=p;
}
for (int i = 1; i <= k; ++i) {
for(nod* a=K[i];a!=NULL;a=a->adr)
fout<<a->et<<" ";
fout << endl;
}
return 0;
}