Cod sursa(job #1004574)

Utilizator PlatonPlaton Vlad Platon Data 3 octombrie 2013 08:43:22
Problema Sortare topologica Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

ifstream f("sortaret.in");
ofstream g("sortaret.out");

struct nod
{
    vector<nod*> nexts;
    int val;

    nod(int vl)
    {
        val = vl;
    }

    void addChild(int val)
    {
        nexts.push_back(new nod(val));
    }
};

int n,m;

vector<nod> nodes;
bool exista[100000];

nod* search(int val, nod* n)
{
    if(n->val == val)
    {
        return n;
    }
    nod* t;
    for(int i=0;i<n->nexts.size();i++)
    {
        t=search(val,n->nexts[i]);
        if(t!=NULL)
        {
            return t;
        }
    }
    return NULL;
}

void addNode(int a, int b)
{
    if(!exista[a])
    {
        nodes.push_back(a);
        exista[a]=true;
    }

    nod* t;
    for(int i=0;i<nodes.size();i++)
    {
        t = search(a,&nodes[i]);
        if(t)
        {
            t->addChild(b);
        }
    }
}

int nn = 1;
void show(nod nod)
{
    if(nn<=n)
    {
        g<<nod.val;
        nn++;
    }
    for(int i=0;i<nod.nexts.size();i++)
    {
        show(*nod.nexts[i]);
    }
}

int main()
{
    f>>n>>m;
    for(int i=0;i<m;i++)
    {
        int t,y;
        f>>t>>y;
        addNode(t,y);
    }

    show(nodes[0]);

    return 0;
}