Pagini recente » Cod sursa (job #251856) | Cod sursa (job #1781276) | Cod sursa (job #736057) | Cod sursa (job #2445540) | Cod sursa (job #1733718)
#include <cstdio>
#include<vector>
#include<deque>
#include<cstring>
#define inf 2147483647
using namespace std;
int T,n,m,s,ok;
int c[50003],dmin[50003];
vector<int>graf[50003],costuri[50003];
deque<int>St;
void dijkstra(int nod)
{
int sz,x1,x2,cost;
for(int i=1;i<=n;i++)
dmin[i]=inf;
dmin[nod]=0;
St.push_back(nod);
while(!St.empty())
{
x1=St.front();
St.pop_front();
sz=graf[x1].size();
for(int i=0;i<sz;i++)
{
x2=graf[x1][i];
cost=costuri[x1][i];
if(dmin[x2]>dmin[x1]+cost)
{
dmin[x2]=dmin[x1]+cost;
St.push_back(x2);
}
}
}
}
int main()
{
freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
scanf("%d",&T);
while(T)
{
T--;
ok=1;
scanf("%d%d%d",&n,&m,&s);
for(int i=1;i<=n;i++)
scanf("%d",&c[i]);
for(int i=1,x,y,d;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&d);
graf[x].push_back(y);
graf[y].push_back(x);
costuri[x].push_back(d);
costuri[y].push_back(d);
}
dijkstra(s);
for(int i=1;i<=n&&ok==1;i++)
if(c[i]!=dmin[i])
{
printf("NU\n");
ok=0;
}
if(ok==1)
printf("DA\n");
memset(dmin,0,sizeof(dmin));
for(int i=0;i<=50003;i++)
{
graf[i].clear();
costuri[i].clear();
}
}
return 0;
}