Cod sursa(job #3366656)

Utilizator Calin929CalinMihai Calin929 Data 3 octombrie 2026 10:48:21
Problema Sortare topologica Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("sortaret.in");
ofstream fout("sortaret.out");

vector <int> v[50005];
vector <int> drum[50005];
int grd[50005],vis[50005];
int vmax=-1,nr=0;
int n,m,i,j,a,b,ok,ciclu,marime,t;

bool dfs(int nod){
    drum[nr].push_back(nod);
    vis[nod]=0;
    for(int x : v[nod]){
        if(vis[x]==0){
            if(dfs(x)){
                return true;
            }
        }
        else if(vis[x]==1){
            return true;
        }
    }
    vis[nod]=2;
    return false;
}

int main(){
    fin>>n>>m;
    for(i=1;i<=m;i++){
        fin>>a>>b;
        v[a].push_back(b);
        grd[b]++;
    }
    ok=1;
    ciclu=1;
    for(i=1;i<=n;i++){
        if(grd[i]==0){
            ok=0;
            nr++;

            if(dfs(i)==true){
                ciclu=0;
            }
            marime=drum[nr].size();
            if(marime>vmax){
                vmax=marime;
            }

        }
    }
    if(ok==1){
        fout<<"CICLU";
    }
    else if(ciclu==0){
        fout<<"CICLU";
    }
    else{
        for(i=0;i<vmax;i++){
            for(j=1;j<=nr;j++){
                t=drum[j].size();
                if(i<t){
                    fout<<drum[j][i]<<" ";
                }
            }
        }
    }
}