Cod sursa(job #1436365)

Utilizator ovidiuz98Zamfir Ovidiu ovidiuz98 Data 15 mai 2015 20:01:44
Problema Sortare topologica Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>
#include <vector>
#include <bitset>
#define DIM 100002
using namespace std;

ifstream fin("srevni.in");
ofstream fout("srevni.out");
vector <int> v[DIM];
int N,M,MINI[DIM];
bitset <DIM> viz;
int d[DIM],S[DIM];
int k;
char s[1000000];
void DFS(int x){
    viz[x]=1;
    for(int i=0;i<v[x].size();i++)
        if(!viz[v[x][i]])
            DFS(v[x][i]);
    S[++k]=x;
}
int main(){
    fin>>N>>M;
    fin.get();
    fin.get(s,1000000);
    N=0;
    for(int i=0;s[i]!=0;i++){
        if(s[i]>='0' && s[i]<='9'){
            N++;
            while(s[i]>='0' && s[i]<='9')
                MINI[N]=MINI[N]*10+s[i]-'0',i++;
        }
    }
    while(M--){
        int x,y;
        fin>>x>>y;
        v[x].push_back(y);
        d[y]++;
    }
    for(int i=1;i<=N;i++)
        if(d[i]==0)
            DFS(i);
    for(int i=1;i<=N;i++)
        for(int j=0;j<v[i].size();j++)
            MINI[i]=min(MINI[i],MINI[v[i][j]]);
    for(int i=1;i<=N;i++)
        fout<<MINI[i]<<" ";
    fout<<"\n";
    fin.close();fout.close();
    return 0;
}