Pagini recente » Cod sursa (job #1779056) | Cod sursa (job #2856640) | Cod sursa (job #710880) | Cod sursa (job #2074440) | Cod sursa (job #1910030)
#include <fstream>
#include <vector>
#include <set>
using namespace std;
ifstream f("sortaret.in");
ofstream g("sortaret.out");
int GR[50001];
vector <int> G[50001], F;
vector <int> :: iterator ig;
set <int> L; // lista nodurilor care au gradul interior 0(nu depind de alte noduri)
set <int> :: iterator il;
int N,M;
int main()
{
int i, x, y;
f >> N >> M;
for( i = 1; i <= M; i++ ){
f >> x >> y;
G[x].push_back(y);
GR[y]++;
}
for( i = 1; i <= N; i++ )
if(GR[i] == 0){
L.insert(i);
}
/*L.erase(L.begin());
for( il = L.begin(); il != L.end(); il++ )
g << *(il) << " ";*/
while(!L.empty()){
il = L.begin();
F.push_back(*il);
L.erase(il);
x = (*il);
for(ig = G[x].begin(); ig < G[x].end(); ig++){
GR[*(ig)]--;
if( GR[*(ig)] == 0 )
L.insert(*(ig));
}
}
for(ig = F.begin(); ig < F.end(); ig++)
g << *ig << " ";
return 0;
}