Cod sursa(job #1438141)

Utilizator karlaKarla Maria karla Data 19 mai 2015 02:45:53
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <stdio.h>
#include <vector>

using namespace std;

FILE*f=fopen("distante.in","r"),*g=fopen("distante.out","w");

int n, m, s, t, a, b, c;
vector < pair<int, int> > l[50003];


int main()
{
    fscanf(f,"%d ",&t);
    int viz[50003], v[50003];
    for(int i = 1; i <= t; i++)
    {
        int ok = 0, d;
        fscanf(f, "%d %d %d",&n,&m, &s);
        for(int i = 1; i <= n; i++)
        {
            fscanf(f,"%d ", &d);
            v[i] = d;
            viz[i] = 0;
        }
        for(int j = 1; j <= m; j++)
        {
            fscanf(f, "%d %d %d",&a,&b,&c );
            l[a].push_back(make_pair(b,c));
            l[b].push_back(make_pair(a,c));
        }
        int nr = n, minim = 1003, h,p =0 ;
        viz[s] = 1;
        while(nr > 0)
        {
            for(int i = 0; i < l[s].size(); i++)
            {
                if(l[s][i].second < minim) {minim = l[s][i].second; h = l[s][i].first;}
                if((p+l[s][i].second) == v[l[s][i].first] ) nr --, viz[l[s][i].first] = 1;
                if(((p+l[s][i].second < v[l[s][i].first]) || (p+l[s][i].second > v[l[s][i].first])) && viz[l[s][i].first] == 0) {ok = 1;break;}
            }
            if(ok == 1) {fprintf(g,"NU\n");break;}
             s = h;
             p = minim;
             minim = 1003;
        }
        if(ok == 0) fprintf(g,"DA\n");
    }
    return 0;
}