Cod sursa(job #2120772)

Utilizator tiberiu.bucur17Tiberiu Constantin Emanoil Bucur tiberiu.bucur17 Data 2 februarie 2018 21:16:40
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <cstdio>
#include <utility>
#include <vector>
#define MAXN 50001
using namespace std;
vector <pair <int,int> >v[MAXN];
int dist[MAXN];
int main()
{
    FILE *fin,*fout;
    fin=fopen("distante.in","r");
    fout=fopen("distante.out","w");
    int t,n,m,x,y,c;
    bool ok;
    fscanf(fin,"%d",&t);
    for(int i=0;i<t;i++)
    {
        fscanf(fin,"%d%d%d",&n,&m,&x);
        for(int j=1;j<=n;j++)
            fscanf(fin,"%d",&dist[j]);
        if(!dist[x])
            ok=true;
        else
            ok=false;
        for(int j=0;j<m;j++)
        {
            fscanf(fin,"%d%d%d",&x,&y,&c);
            v[x].push_back(make_pair(y,c));
            v[y].push_back(make_pair(x,c));
        }
        for(int j=1;j<=n && ok;j++)
            for(unsigned int k=0;k<v[j].size();k++)
            {
                y=v[j][k].first;c=v[j][k].second;
                if(dist[y]>dist[j]+c)
                {
                    ok=false;
                    break;
                }
            }
        if(ok)
            fprintf(fout,"DA\n");
        else
            fprintf(fout,"NU\n");
        for(int j=1;j<=n;j++)
            v[j].clear();
    }
    fclose(fin);
    fclose(fout);
}