Cod sursa(job #3303948)

Utilizator MrPetcuPetcu Robert MrPetcu Data 19 iulie 2025 14:46:36
Problema Sortare topologica Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <fstream>
#include <algorithm>    // std::reverse
#include <vector>
using namespace std;

ifstream fin ("easygraph.in");
ofstream fout ("easygraph.out");

const int inf = 2000000000;

int x, y, n, m, viz[15000+5];
vector<int> v[15000+5], st;
int valori[15000+5];
int sum[15000+5];
int suma;
int t;

void dfs(int nod) {
    viz[nod] = 1;
    for(auto u : v[nod]) {
        if(!viz[u])
            dfs(u);
    }
    st.push_back(nod);
}

int main() {
    fin >> t;
    for(int tt = 1; tt <= t; tt++){
        fin >> n >> m;
        for(int i = 1; i <= n; i++){
            fin >> valori[i];
        }
        for(int i = 1; i <= m; i ++) {
            fin >> x >> y;
            v[x].push_back(y);
        }
        for(int i = 1; i <= n; i ++) {
            if(viz[i] == 0)
                dfs(i);
        }
        reverse(st.begin(), st.end());
        for(int i = 0; i < n; i ++)
            sum[i] = valori[st[i]];
        for(int i = 0; i < n; i++){
            if(suma < 0){
                suma = 0;
            }
            suma += sum[i];
        }
        fout << suma;
    }
    return 0;
}