Pagini recente » Cod sursa (job #172861) | Istoria paginii utilizator/kissreka | Sandbox (cutiuţa cu năsip) | Monitorul de evaluare | Cod sursa (job #2133878)
#include <fstream>
#include <vector>
using namespace std;
#define MAXN 50000
int N, M, gradeDeIntrare[MAXN+1], coadaNodurilorDeGrad0[MAXN+1];
vector<int> succesori[MAXN+1];
// folosesc o coada coadaNodurilorDeGrad0 in care introduc pe rand nodurile care
// au gradul exterior zero
void calcul(void)
{
ofstream fout("sortaret.out", ios::out);
int i, x;
vector<int>::iterator it;
for(x = 1; x <= N; x++)
{
if(gradeDeIntrare[x] == 0)
{
coadaNodurilorDeGrad0[++coadaNodurilorDeGrad0[0]] = x;
}
}
for(i = 1; i <= N; i++)
{
x = coadaNodurilorDeGrad0[i];
fout<<x<<" ";
for(it = succesori[x].begin(); it != succesori[x].end(); ++it)
{
gradeDeIntrare[*it]--;
if(gradeDeIntrare[*it] == 0) coadaNodurilorDeGrad0[++coadaNodurilorDeGrad0[0]] = *it;
}
}
fout<<endl;
fout.close();
}
void citire(void)
{
ifstream fin("sortaret.in", ios::in);
fin>>N>>M;
int i, a, b;
for(i = 1; i <= M; i++)
{
fin>>a>>b;
succesori[a].push_back(b);
gradeDeIntrare[b]++;
}
}
int main(void)
{
bool vecheaValoare=istream::sync_with_stdio(false);
citire();
calcul();
istream::sync_with_stdio(vecheaValoare);
return 0;
}