Pagini recente » Cod sursa (job #166137) | Cod sursa (job #994754) | Cod sursa (job #2572562) | Cod sursa (job #451250) | Cod sursa (job #891264)
Cod sursa(job #891264)
#include<stdio.h>
#include<vector>
#include<algorithm>
#include<queue>
#define mp make_pair
#define dis first
#define node second
using namespace std;
priority_queue <pair<int,int> ,vector<pair<int,int> > ,greater<pair<int,int> > >q;
FILE*in=fopen("distante.in","r");
FILE*out=fopen("distante.out","w");
int dist[50001],v[50001];
vector<pair<int,int> >a[50001];
void dijkstra(int nod);
int noduri,muchii,start;
int main()
{
int query;
fscanf(in,"%d",&query);
for(int ooo=1;ooo<=query;++ooo)
{
fscanf(in,"%d%d%d",&noduri,&muchii,&start);
for(int i=1;i<=noduri;++i)
{
dist[i]=1061109567;
fscanf(in,"%d",&v[i]);
}
for(int i=1;i<=muchii;++i)
{
int data1,data2,data3;
fscanf(in,"%d%d%d",&data1,&data2,&data3);
a[data1].push_back(mp(data3,data2));
a[data2].push_back(mp(data3,data1));
}
dist[start]=0;
dijkstra(start);
bool OK=true;
for(int i=1;i<=noduri;++i)
if(v[i]!=dist[i])
{
OK=false;
break;
}
if(OK)
fprintf(out,"DA\n");
else
fprintf(out,"NU\n");
for(int i=1;i<=noduri;++i)
a[i].clear();
}
fclose(in);
fclose(out);
return 0;
}
void dijkstra(int nod)
{
q.push(mp(0,nod));
while(!q.empty())
{
pair<int,int> curent=q.top();
q.pop();
for(int i=0;i<(int)a[curent.node].size();++i)
{
if(dist[a[curent.node][i].node]>dist[curent.node]+a[curent.node][i].dis)
{
dist[a[curent.node][i].node]=dist[curent.node]+a[curent.node][i].dis;
q.push(mp(dist[a[curent.node][i].node],a[curent.node][i].node));
}
}
}
}