Pagini recente » Monitorul de evaluare | Cod sursa (job #935253) | Cod sursa (job #211513) | Cod sursa (job #2938419) | Cod sursa (job #1438141)
#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;
}