Cod sursa(job #800030)

Utilizator gegeadDragos Gegea gegead Data 20 octombrie 2012 16:44:42
Problema Sortare topologica Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
int n,m,p[50001];
bool viz[50001];
vector <int> l[50001];


void bfs(int u)
{
    int c;vector<int>::iterator it;
    queue <int> q;
    memset(viz,0,sizeof(viz));
    q.push(u);
    while(!q.empty())
    {
        c=q.front();
        for(it=l[c].begin();it!=l[c].end();++it)
            if(viz[*it]==0)
            {
                q.push(*it);
                viz[*it]=1;
            }
        q.pop();
    }
}




int main()
{
    freopen("sortaret.in","r",stdin);
    freopen("sortaret.out","w",stdout);
    int i,u,v,j,ok=1;
    scanf("%d%d",&n,&m);
    for(i=1;i<=m;++i)
    {
        scanf("%d%d",&u,&v);
        l[u].push_back(v);
        p[v]=p[u]+1;
    }
    while(ok)
    {
        ok=0;
        for(i=1;i<=n;++i)
        {
            bfs(i);
            if(p[i]==0)
            {
                for(j=1;j<=n;++j)
                    if(viz[j]==1)
                        --p[j];
                printf("%d ",i);
            }
            else
                ok=1;
        }
    }
    printf("\n");
    return 0;
}