Pagini recente » Istoria paginii runda/oji-2004-ix/clasament | Cod sursa (job #899559) | Cod sursa (job #520934) | Cod sursa (job #786484) | Cod sursa (job #2133756)
#include <iostream>
#include <fstream>
#include <queue>
#include<set>
#include <cstdlib>
using namespace std;
#define MAXN 50100
#define MAXM 100000
int n, m;
typedef queue<int> CoadaDeIntregi;
typedef set<int> Multime;
CoadaDeIntregi cSortata;
typedef CoadaDeIntregi CoziDeIntregi[MAXN+1];
CoziDeIntregi succesori;
int gradIntrare[MAXN+1];
Multime noduriDeGradInterior0;
void citire(void)
{
ifstream fin("sortaret.in", ios::in);
fin>>n>>m;
int i,x,y;
for(i=1;i<=n;i++)
{
noduriDeGradInterior0.insert(i); //presupunem ca toate elementele ar fi de grad 0
}
exit(1);
for(i=0;i<m;i++)
{
fin>>x>>y;
gradIntrare[y]++;
succesori[x].push(y);
noduriDeGradInterior0.erase(y);
}
fin.close();
}
void calcul(void)
{
int x=0, y=0;
while(!noduriDeGradInterior0.empty())
{
x= *(noduriDeGradInterior0.begin());
noduriDeGradInterior0.erase(x);
cSortata.push(x);
while(!succesori[x].empty())
{
y=succesori[x].front();
succesori[x].pop();
if( ! (--gradIntrare[y]) ) //a ajuns 0?
{
noduriDeGradInterior0.insert(y);
}
}
}
}
void scrieSolutia(void)
{
ofstream fout("sortaret.out", ios::out);
while(!cSortata.empty())
{
fout<<cSortata.front()<<" ";
cSortata.pop();
}
fout<<endl;
fout.close();
}
int main()
{
/*
bool vecheaValoare=cin.sync_with_stdio(false);
citire();
calcul();
scrieSolutia();
cin.sync_with_stdio(vecheaValoare);
*/
return 0;
}