Pagini recente » Cod sursa (job #873077) | Cod sursa (job #2935631) | Cod sursa (job #2742341) | Cod sursa (job #51688) | Cod sursa (job #1249747)
#include <fstream>
#define dmax 5005
using namespace std;
ifstream fin("ctc.in");
ofstream fout("ctc.out");
int m2[dmax], m1[dmax], g[dmax][dmax], gt[dmax][dmax], n, m, lg1, lg2, nrCtc;
bool uz[dmax], fol[dmax];
void citire();
void rez();
void dfs(int, int[], int&, int[][dmax]);
inline void clear_uz();
void ctc(int);
void clear();
int main(){
citire();
rez();
return 0;
}
void citire(){
int x, y;
fin>>n>>m;
for(int i=1; i<=m; ++i){
fin>>x>>y;
g[x][ ++g[x][0] ]=y;
gt[y][ ++gt[y][0] ]=x;
}
}
void rez(){
for(int i=1; i<=n; ++i)
if(!fol[i]){
dfs(i, m1, lg1, g);
clear_uz();
dfs(i, m2, lg2, gt);
clear_uz();
ctc(i);
clear();
}
}
void dfs(int vf, int a[], int &lg, int m[][dmax]){
uz[vf]=1; a[++lg]=vf;
for(int i=1; i<=m[vf][0]; ++i)
if(!uz[ m[vf][i] ])
dfs(m[vf][i], a, lg, m);
}
inline void clear_uz(){
for(int i=1; i<=dmax; ++i) uz[i]=0;
}
void ctc(int vf){
int i, j;
fout<<++nrCtc<<": "<<vf<<' ';
fol[vf]=1;
for(i=1; i<=lg1; ++i)
for(j=1; j<=lg2; ++j)
if(m1[i]==m2[j] && m1[i]!=vf){
fol[m1[i]]=1;
fout<<m1[i]<<' ';
}
fout<<'\n';
}
void clear(){
int i;
for(i=1; i<=lg1+1; ++i) m1[i]=0;
for(i=1; i<=lg2+1; ++i) m2[i]=0;
lg1=lg2=0;
}