Pagini recente » Cod sursa (job #2938025) | Cod sursa (job #163429) | Cod sursa (job #1488070) | Cod sursa (job #2176842) | Cod sursa (job #1370080)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
struct Nod{int inf,val;Nod*leg;};
typedef Nod* nod;
nod L[50001];
queue<int> Q;
int cost[50001],n,m,v2[50001],v;
void add(int x, int y, int val)
{
nod p=new Nod;
p->inf=y;
p->leg=L[x];
p->val=val;
L[x]=p;
}
void citire_graf()
{
int i,x,y,val;
fin>>n>>m>>v;
for(i=1;i<=n; i++) {L[i]=NULL;cost[i]=999999999;}
for(i=1; i<=n; i++) fin>>v2[i];
for(i=1; i<=m; i++)
{
fin>>x>>y>>val;
add(x,y,val);
add(y,x,val);
}
}
void verif(){
for(int i=1; i<=n; i++)
if(cost[i]!=v2[i]){
fout<<"NU\n";
return;
}
fout<<"DA\n";
}
void dj(int v)
{
cost[v]=0;
Q.push(v);
while( !Q.empty() )
{
for(nod q=L[Q.front()];q;q=q->leg)
if(cost[q->inf]>cost[Q.front()]+q->val)
{
cost[q->inf]=cost[Q.front()]+q->val;
Q.push(q->inf);
}
Q.pop();
}
}
int main()
{
int t,i;
fin>>t;
for(i=1; i<=t; i++)
{
citire_graf();
dj(v);
verif();
}
return 0;
}