Cod sursa(job #3154600)

Utilizator catalinmarincatalinmarin catalinmarin Data 5 octombrie 2023 13:28:19
Problema Distante Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.75 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream cin ("distante.in");
ofstream cout ("distante.out");
int main(){
    int grafuri;
    cin >> grafuri;
    for (int gr = 1; gr <= grafuri; gr++){
        vector<int>vecini[50005];
        vector<int> muchii_corespondente[50005];
        bool distcorecte = true;
        int distante[50005];
        int much[100001][4];
        int noduri, muchii, sursa;
        cin >> noduri >> muchii >> sursa;
        for (int i = 1; i <= noduri; i++){
            cin >> distante[i];
        }
        for (int i = 1; i <= muchii; i++){
            int x, y, cost;
            cin >> x >> y >> cost;
            muchii_corespondente[x].push_back(i);
            muchii_corespondente[y].push_back(i);
            vecini[x].push_back(y);
            vecini[y].push_back(x);
            much[i][1] = x;
            much[i][2]= y;
            much[i][3] = cost;
        }
        for (int i = 1; i <= noduri; i++){
            int dist_min = 1000000001;
            if (sursa != i) {
                for (int j = 0; j < vecini[i].size(); j++) {
                    int muchia_corespondenta = muchii_corespondente[i][j];
                    int dist_totala = distante[vecini[i][j]] + much[muchia_corespondenta][3];
                    dist_min = min(dist_min, dist_totala);
                }
                if (dist_min != distante[i]) {
                    distcorecte = false;
                    cout << "NU" << '\n';
                    break;
                }
            } else {
                if (distante[i] != 0) {
                    distcorecte = false;
                    cout << "NU" << '\n';
                }
            }
        }
        if (distcorecte == true)
            cout << "DA" << '\n';
    }
    return 0;
}