Pagini recente » Cod sursa (job #1943845) | Cod sursa (job #1114302) | Cod sursa (job #1380232) | Cod sursa (job #2294847) | Cod sursa (job #442836)
Cod sursa(job #442836)
#include<fstream.h>
#include<vector>
#define maxn 201010
using namespace std;
struct timpi
{
int intrare;
int iesire;
};
int sel[maxn],n,m;
vector< int > listadirect[maxn];
vector< int > listainvers[maxn];
int k,iesiri[maxn];
timpi A[maxn];
ofstream g ("ctc.out");
void DF (int i)
{
int j;
sel[i]=1;
A[i].intrare=k++;
for (j=0;j<listadirect[i].size();j++)
{
if (sel[listadirect[i][j]]==0)
{
DF(listadirect[i][j]);
k++;
}
}
A[i].iesire=k;
iesiri[++m]=i;
}
void DF2(int i)
{
int j;
sel[i]=0;
for (j=0;j<listainvers[i].size();j++)
{
if(sel[listainvers[i][j]]==1)
// if (A[i].iesire>A[listainvers[i][j]].intrare)
DF2(listainvers[i][j]);
}
g<<i<<" ";
}
void DF3(int i)
{
int j;
sel[i]=0;
for (j=0;j<listainvers[i].size();j++)
if(sel[listainvers[i][j]]==1)
// if (A[i].iesire>A[listainvers[i][j]].intrare)
DF3(listainvers[i][j]);
}
int main ()
{
int i, j,h=0;
ifstream f ("ctc.in");
f>>n>>h;
for( int i = 1; i <= h; ++i)
{
f>>i>>j;
listadirect[i].push_back( j );
listainvers[j].push_back( i );
}
for (i=1;i<=n;i++)
{
if (sel[i]==0)
{
DF(i);
k++;
}
}
h = 0;
for(i=m;i>=1;i--)
{
if (sel[iesiri[i]]==1)
{
DF3(iesiri[i]);
h++;
}
}
g<<h<<endl;
for (i=1;i<=n;i++)
sel[i]=1;
for(i=m;i>=1;i--)
{
if (sel[iesiri[i]]==1)
{
DF2(iesiri[i]);
g<<endl;
}
}
f.close();
g.close();
return 0;
}