Pagini recente » Statistici Sergiu Topan (serge) | Profil EmaMihaela | Profil pohoatza | Istoria paginii utilizator/wolfy31 | Cod sursa (job #2474887)
#include <bits/stdc++.h>
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
vector< pair<int,int> > v[50100];
priority_queue< pair <int,int> , vector < pair <int,int> > , greater < pair <int,int> > > h;
int d[50100],viz[50100];
void dijkstra(int nod)
{
int nd,vecin,distanta;
d[nod]=0;
h.push(make_pair(0,nod));
while(!h.empty())
{
nd=h.top().second;
if(!viz[nd])
{
viz[nd]=1;
while(!v[nd].empty())
{
vecin=v[nd].back().first;
distanta=v[nd].back().second;
v[nd].pop_back();
if(d[vecin]>d[nd]+distanta)
{
d[vecin]=d[nd]+distanta;
h.push(make_pair(d[vecin],vecin));
}
}
}
h.pop();
}
}
int T,pas,ok,n,m,S,i,x,y,c,dist[50100];
int main()
{
f>>T;
for(pas=1;pas<=T;pas++)
{
f>>n>>m>>S;
for(i=1;i<=n;i++)
{
f>>dist[i];
viz[i]=0;
d[i]=INT_MAX;
}
for(i=1;i<=m;i++)
{
f>>x>>y>>c;
v[x].push_back(make_pair(y,c));
v[y].push_back(make_pair(x,c));
}
dijkstra(S);
ok=1;
for(i=1;i<=n;i++)
{
if(d[i]!=dist[i]){ok=0;i=n+1;break;}
}
if(ok==1)g<<"DA"<<'\n';
else g<<"NU"<<'\n';
}
return 0;
}