Pagini recente » Cod sursa (job #534965) | Cod sursa (job #1223815) | Cod sursa (job #2680863) | Cod sursa (job #836406) | Cod sursa (job #1067413)
#include<fstream>
#include<vector>
#define pb push_back
using namespace std;
const int maxn = 100000;
vector <int> a[maxn],b[maxn/2];
int n,m,p[maxn],c[maxn],check[maxn],sol=0;
void parc1(int nod)
{
p[nod]=1;
for(int j=0;j<a[nod].size();++j)
if(!p[a[nod][j]] && !check[a[nod][j]])parc1(a[nod][j]);
}
int parc2(int find,int nod){
// bool t=false;
c[nod]=1;
if(find==nod)return true;//t=true;
//if(t)return t;
for(int j=0;j<a[nod].size();++j){
if(!c[a[nod][j]] && (!check[a[nod][j]] || a[nod][j]==find || true) && p[a[nod][j]]==1) if(parc2(find,a[nod][j]))return true;//t=true;
//if(t)return t;
}
return false;//t;
}
main(){
ifstream fin("ctc.in");
ofstream fout("ctc.out");
fin>>n>>m;
int x,y;
for(int i = 1; i<=m;++i){
fin>>x>>y;
a[x].pb(y);
}
/* for(int k=1;k<=n;++k){
for(int l=0;l<a[k].size();++l)fout<<a[k][l]<<" ";
fout<<"\n";
}*/
// parc1(1);
// if(parc2(1,2))fout<<2;
int nod;
// memset( check1, 0, sizeof( check1 ) );
for(int k=0;k<=n;check[++k]=0);
for(int j=1;j<=n;++j) {
if(!check[j]){
//
nod=j;
// memset( p, 0, sizeof( p ) );
for(int k=0;k<=n;p[++k]=0);
parc1(nod);
for(int i=1;i<=n;i++){
if(!check[i] && i!=nod && p[i]){
//memset( c, 0, sizeof( c ) );
for(int k=0;k<=n;c[++k]=0);
if(parc2(nod,i)){
if(!check[nod]){
sol++;
check[nod]=1; // fout<<nod<<" ";
b[sol].pb(nod);
}
b[sol].pb(i);
// fout<<i<<" ";
check[i]=1;
}
}
}
check[nod]=1;
// fout<<"\n";
// for(int k=1;k<=n;++k)fout<<check[k]<<" ";fout<<")\n";
// for(int k=1;k<=n;++k)fout<<p[k]<<" ";fout<<"(\n";
}
}
fout<<sol<<"\n";
for(int j=1;j<=sol;++j){
for(int i=0;i<b[j].size();i++)fout<<b[j][i]<<" ";
fout<<"\n";
}
//for(int k=1;k<=n;++k)fout<<check[k]<<"\n";
/* while(ig<=sg){
for(int j=0;j<=a[c[ig]].size();++j){
if(!p[a[c[ig]][j]]){
c[++sg]=a[c[ig]][j];
check[a[c[ig]][j]]++;
}
}
++ig;
}*/
fin.close(); fout.close();
}