Pagini recente » Cod sursa (job #1939295) | Cod sursa (job #2471061) | Cod sursa (job #1375229) | Cod sursa (job #2129533) | Cod sursa (job #1124451)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream in("distante.in");
ofstream out("distante.out");
struct nod{int frate, cost; nod(int frate, int cost) {this->frate=frate; this->cost=cost;}};
queue <int> q;
vector <nod> a[50001];
int t, n, m, s, d[50001], v[50001];
bool ok=true;
void bfs(int x)
{
q.push(x);
d[x]=0;
unsigned int i;
int y;
while(!q.empty())
{
x=q.front();
q.pop();
for(i=0;i<a[x].size();i++)
{
y=a[x][i].frate;
if(d[x]+a[x][i].cost<d[y])
{
d[y]=d[x]+a[x][i].cost;
q.push(y);
}
}
}
}
int main()
{
int i, j, x, y, z;
in>>t;
for(i=1;i<=t;i++)
{
in>>n>>m>>s;
for(j=1;j<=n;j++)
{
in>>v[j];
d[j]=50000000;
}
for(j=1;j<=m;j++)
{
in>>x>>y>>z;
a[x].push_back(nod(y, z));
a[y].push_back(nod(x, z));
}
bfs(s);
j=1;
while(ok && j<=n)
{
if(v[j]!=d[j]) ok=false;
j++;
}
if(ok) out<<"DA"<<"\n";
else out<<"NU"<<"\n";
}
return 0;
}