11686 - Pick up sticks

#include<bits/stdc++.h>
#define SZ 1000006
using namespace std;

vector<long>graph[SZ];
vector<long>topsort;
long color[SZ],tag;

void DFS(long p)
{
    color[p]=1;
    for(long i=0; i<graph[p].size(); i++)
    {
        if(color[graph[p][i]]==0)
        {
            DFS(graph[p][i]);
        }
        else if(color[graph[p][i]]==1)
        {
            tag=1;
        }
    }
    topsort.push_back(p);
    color[p]=2;
}

int main()
{
    long n,m,i,a,b,c;
    while(scanf("%ld%ld",&n,&m)==2)
    {
        if(n==0 && m==0)
        {
            break;
        }
        for(i=1; i<=m; i++)
        {
            scanf("%ld%ld",&a,&b);
            graph[a].push_back(b);
        }
        tag=0;
        for(i=1; i<=n; i++)
        {
            if(color[i]==0)
            {
                DFS(i);
            }
        }
        c=topsort.size();
        if(!tag)
        {
            for(i=c-1; i>=0; i--)
            {
                printf("%ld\n",topsort[i]);
            }
        }
        else
        {
            printf("IMPOSSIBLE\n");
        }
        memset(color,0,sizeof(color));
        for(i=0; i<=n; i++)
        {
            graph[i].clear();
        }
        topsort.clear();
    }
    return 0;
}

0 comments: (+add yours?)