Pagini recente » Cod sursa (job #3287948) | Atasamentele paginii Poze preONI 2007 - deschidere | Cod sursa (job #1746642) | Cod sursa (job #2419987) | Cod sursa (job #1607515)
#include <fstream>
#include <stack>
#include <queue>
#define N 100010
using namespace std;
ifstream fin("ctc.in");
ofstream fout("ctc.out");
int n,m,i,j,V[N],nr=0;
char c;
stack <int> Timp;
queue <char> Buffer;
struct nod{
int info;
nod *urm;
};
nod *Graf[N], *Transp[N];
void adauga(int i, int j){
nod *p=new nod, *q=new nod;
p->info=j;
p->urm=Graf[i];
Graf[i]=p;
q->info=i;
q->urm=Transp[j];
Transp[j]=q;
}
void DF(int x, nod* L[], int maxx){
nod *p;
p=L[x];
while(p!=NULL && V[p->info]<maxx)
{
V[p->info]++;
DF(p->info,L,maxx);
if(maxx==1)
Timp.push(p->info);
p=p->urm;
}
}
int main(){
fin>>n>>m;
while(fin>>i>>j)
adauga(i,j);
for(i=1;i<=n;i++)
{
if(V[i]==0)
{
V[i]=1;
DF(i,Graf,1);
Timp.push(i);
while(!Timp.empty())
{
V[Timp.top()]++;
DF(Timp.top(),Transp,2);
nr++;
while(!Timp.empty() && V[Timp.top()]==2)
{
m=Timp.top();
c=(char)m+48;
Buffer.push(c);
Buffer.push(' ');
Timp.pop();
}
Buffer.push('\n');
}
}
}
fout<<nr<<'\n';
while(!Buffer.empty())
{
fout<<Buffer.front();
Buffer.pop();
}
fin.close();
fout.close();
return 0;
}