Pagini recente » Cod sursa (job #2603542) | Cod sursa (job #2929471) | Cod sursa (job #306758) | Cod sursa (job #3287806) | Cod sursa (job #2639193)
#include <bits/stdc++.h>
using namespace std;
ifstream in("distante.in");
ofstream out("distante.out");
const int lim=5e4+3;
const int inf=2e9+7;
vector<pair<int,int> > vec[lim];
set<pair<int,int> > s;
int dist[lim],ast[lim];
int n,m,src,tst,a,b,c;
void dijkstra()
{
for(int i=1;i<=n;++i)
dist[i]=inf;
dist[src]=0;
s.clear();
s.insert({0,src});
while(!s.empty())
{
int d=(*(s.begin())).first;
int x=(*(s.begin())).second;
s.erase(s.begin());
if(ast[x]!=d) {out<<"NU\n";return ;}
for(pair<int,int> y:vec[x])
if(dist[y.first]>d+y.second)
{
if(dist[y.first]!=inf)
s.erase(s.find({dist[y.first],y.first}));
dist[y.first]=d+y.second;
if(dist[y.first]<ast[y.first]) {out<<"NU\n";return ;}
s.insert({dist[y.first],y.first});
}
}
out<<"DA\n";
}
int main()
{
in>>tst;
while(tst--)
{
in>>n>>m>>src;
for(int i=1;i<=n;++i)
vec[i].clear();
for(int i=1;i<=n;++i)
in>>ast[i];
for(int i=1;i<=m;++i)
{
in>>a>>b>>c;
vec[a].push_back({b,c});
vec[b].push_back({a,c});
}
dijkstra();
}
return 0;
}