Cod sursa(job #863322)

Utilizator cernat.catallinFMI Cernat Catalin Stefan cernat.catallin Data 23 ianuarie 2013 18:41:21
Problema Distante Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <fstream>
#include <iostream>
#include <vector>
#include <queue>
using namespace std;

#define inf 100000000

ifstream f ("distante.in");
ofstream g ("distante.out");

struct nod_g{
    int nod, cost;
};

vector< vector<nod_g> > graf;
vector<unsigned int> cost;
vector<nod_g>::iterator it;
nod_g temp;
int n, m, t, s;
bool bun;

void citire(){
    int x, y, c;
    f >> n >> m >> s;
    graf.resize(n+1);
    for(int i = 1 ; i <= n; ++i) graf[i].clear();
    cost.resize(n+1);

    for(int i = 1; i <= n; ++i) f >> cost[i];
    for(int i = 1; i <= m; ++i){
        f >> x >> y >> c;
        temp.nod = y; temp.cost = c;
        graf[x].push_back(temp);
        temp.nod = x; temp.cost = c;
        graf[y].push_back(temp);
    }
}

void verifica(){
    for(int i = 1; i <= n; ++i){
        for(it = graf[i].begin(); it != graf[i].end(); ++it)
            if(cost[it->nod] > cost[i] + it->cost){
                bun = false;
                return;
            }
    }
}

int main(){
    f >> t;
    for(int i = 1; i <= t; ++i){
        citire();
        bun = true;
        verifica();
        if(!bun) g << "NU\n";
            else g << "DA\n";
    }
    f.close();
    g.close();

    return 0;
}