Cod sursa(job #2333015)

Utilizator Dragne.Andrei11Dragne Andrei Dragne.Andrei11 Data 31 ianuarie 2019 16:51:15
Problema Sortare topologica Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <bits/stdc++.h>

using namespace std;

const int nmax=50005;

vector <int> noduri[nmax];
bool visited[nmax];

struct nod
{
  int x, y, prioritate;
}v[nmax];

bool cmp(nod a, nod b)
{
  if(a.x==b.x)
    return a.prioritate<b.prioritate;
  return a.x<b.x;
}

void dfs(int start_node)
{
  printf("%d ", start_node);
  visited[start_node]=true;
  for(int i=0;i<noduri[start_node].size();i++)
    if(visited[noduri[start_node][i]]==false)
      dfs(noduri[start_node][i]);
}

int main()
{
    freopen("sortaret.in", "r", stdin);
    freopen("sortaret.out", "w", stdout);
    int n, m;

    scanf("%d%d", &n, &m);
    int start_node;
    for(int i=1;i<=m;i++)
    {
      scanf("%d%d", &v[i].x, &v[i].y);
      if(i==1)
        start_node=v[i].x;
      v[i].prioritate=i;
    }
    sort(v+1, v+m+1, cmp);
    for(int i=1;i<=m;i++)
    {
      noduri[v[i].x].push_back(v[i].y);
      while(v[i].x==v[i+1].x&&v[i].y==v[i+1].y&&i<=m)
        i++;
    }
    dfs(start_node);
    for(int i=1;i<=n;i++)
      if(visited[i]==false)
        dfs(i);

    return 0;
}