Pagini recente » Cod sursa (job #2724524) | Cod sursa (job #1979055) | Cod sursa (job #2579700) | Cod sursa (job #1420926) | Cod sursa (job #2476793)
#include <bits/stdc++.h>
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
int t,n,m,s,x,y,i,j,cost,d[50005],sol[50005];
bool sel[50005];
typedef pair<int,int> graf;
vector <graf>G[50005];
priority_queue<graf,vector<graf>,greater<graf>>Q;
void dijkstra(int pl)
{
for(int i=1; i<=n; i++)
{
d[i]=INT_MAX;
sel[i]=false;
}
sel[pl]=true;
d[pl]=0;
for(auto it : G[pl])
{
Q.push({it.first,it.second});
d[it.second]=it.first;
}
while(!Q.empty())
{
while(!Q.empty() && sel[Q.top().second])Q.pop();
if(Q.empty())return;
graf k=Q.top();
sel[k.second]=true;
Q.pop();
for(auto it : G[k.second])
{
if(k.first+it.first<d[it.second])
{
d[it.second]=k.first+it.first;
Q.push({d[it.second],it.second});
}
}
}
}
int main()
{
f>>t;
for(i=1; i<=t; ++i)
{
f>>n>>m>>s;
for(j=1; j<=n; ++j)
{
sol[j]=0;
f>>sol[j];
}
for(j=1; j<=n; ++j)G[j].clear();
for(j=1; j<=m; ++j)
{
f>>x>>y>>cost;
G[x].push_back({cost,y});
G[y].push_back({cost,x});
}
dijkstra(s);
for(j=1; j<=n; ++j)
{
if(sol[j]!=d[j])break;
}
if(j!=n+1)g<<"NU\n";
else g<<"DA\n";
}
return 0;
}