Cod sursa(job #3343571)

Utilizator raultimarTimar Raul raultimar Data 27 februarie 2026 19:15:49
Problema Sortare topologica Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("pm2.in");
ofstream out("pm2.out");
long n,m[201],i,j,x;
long d[201],t1[201],t2[201],tmax,viz[201];
set<long>v[200];
queue<int>q;
void dfs(long x){
    t2[x]=tmax;
    viz[x]=1;
    for(auto k:v[x]){
        if(viz[k]==0) dfs(k);
        t2[x]=min(t2[x],t2[k]);
    }
    t2[x]=t2[x]-d[x];
}
int main()
{
    in>>n;
    for(i=1;i<=n;i++) in>>d[i];
    for(i=1;i<=n;i++){
        in>>m[i];
        for(j=1;j<=m[i];j++){
            in>>x;
            v[x].insert(i);
        }
        if(m[i]==0){
           t1[i]=0;
           q.push(i);
        }
    }
    while(!q.empty()){
         x=q.front();
         q.pop();
         tmax=max(tmax,t1[x]+d[x]);
         for(auto k:v[x]){
             m[k]--;
             t1[k]=max(t1[k],t1[x]+d[x]);
             if(m[k]==0) q.push(k);
         }
    }
    out<<tmax<<"\n";
    for(i=1;i<=n;i++){
        if(viz[i]==0){
           dfs(i);
        }
    }
    for(i=1;i<=n;i++){
        out<<t1[i]<<" "<<t2[i]<<"\n";
    }
    return 0;
}