Cod sursa(job #2016919)

Utilizator Horia14Horia Banciu Horia14 Data 30 august 2017 21:07:35
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include<cstdio>
#include<vector>
#define MAX_N 50000
using namespace std;

int main()
{
    int i, T, Node, n, m, source, j, x, y, cost;
    int dist[MAX_N+1];
    bool ok;
    vector<pair<int,int>>::iterator it;
    FILE *fin, *fout;
    fin = fopen("distante.in","r");
    fout = fopen("distante.out","w");
    fscanf(fin,"%d",&T);
    for(i=1; i<=T; i++)
    {
        vector<pair<int,int>>G[MAX_N+1];
        fscanf(fin,"%d%d%d",&n,&m,&source);
        for(j=1; j<=n; j++)
            fscanf(fin,"%d",&dist[j]);
        for(j=1; j<=m; j++)
        {
            fscanf(fin,"%d%d%d",&x,&y,&cost);
            G[x].push_back(make_pair(y,cost));
            G[y].push_back(make_pair(x,cost));
        }
        ok = true;
        for(Node=1; Node<=n && ok; Node++)
        {
            ok = false;
            for(it = G[Node].begin(); it != G[Node].end() && !ok; it++)
                if(dist[Node] == dist[(*it).first] + (*it).second || (Node == source && dist[source] == 0))
                    ok = true;
        }

        if(ok)
            fprintf(fout,"DA\n");
        else fprintf(fout,"NU\n");
    }
    fclose(fin);
    fclose(fout);
    return 0;
}