Pagini recente » Cod sursa (job #2191316) | Cod sursa (job #2936894) | Cod sursa (job #324988) | Cod sursa (job #234602) | Cod sursa (job #1977227)
#include <iostream>
#include <fstream>
#include <stack>
#include <vector>
#include <bitset>
#include <string>
int V, E;
using namespace std;
class nod
{
public:
vector <int> vecini;
};
nod G [100002];
nod GT [100002];
string afis;
bitset <100002> viz;// [100002];
bitset <100002> viz2;// [100002];
stack <int> S;
void DEFEU (int x)
{
if (viz[x])
return;
int i;
viz[x]=1;
for(i=0;i<G[x].vecini.end()- G[x].vecini.begin();++i)
DEFEU(G[x].vecini[i]);
S.push(x);
}
void DEFEU2 (int x)
{
if (viz2[x])
return;
//cout << x << " ";
afis+=to_string(x);
afis+=" ";
int i;
viz2[x]=1;
for(i=0;i<GT[x].vecini.end()- GT[x].vecini.begin();++i)
DEFEU2(GT[x].vecini[i]);
}
int main()
{
ifstream in ("ctc.in");
ofstream out ("ctc.out");
in>>V>>E;
int i, x, y, v, nr = 0;
for(i=0;i<E;++i)
{
in>>x>>y;
G[x].vecini.push_back(y);
GT[y].vecini.push_back(x);
}
//cout<<"CITIRE OK!";
for(i=1;i<=V;++i)
{
if(!viz[i])
DEFEU(i);
}
//cout<<"DEFEU 1";
while(!S.empty())
{
v=S.top();
//cout<<v<<" ";
S.pop();
if(!viz2[v])
{
DEFEU2(v);
//cout<<"\n";
++nr;
afis+="\n";
}
}
out<<nr<<"\n";
out<<afis;
}