Pagini recente » Cod sursa (job #1939414) | Arhiva de probleme | Cod sursa (job #2967068) | Statistici Berlinschi Alexandra Marina (AleeMarina) | Cod sursa (job #2135845)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
vector < pair <int, int> > v[50001];
priority_queue < pair <int, int> > heap;
int dist[50001], sol[50001];
int n, m, t, ok, x0, x, y, z;
void dijkstra(int node)
{
int nod, c, fiu, cost;
heap.push( {0, node} );
while(heap.size())
{
nod=heap.top().second;
c=-heap.top().first;
heap.pop();
if(c<=dist[nod])
{
for(int k=0; k<v[nod].size(); k++)
{
fiu=v[nod][k].first;
cost=v[nod][k].second;
if(cost+dist[nod]<dist[fiu])
{
dist[fiu]=cost+dist[nod];
heap.push( {-dist[fiu], fiu} );
}
}
}
}
}
int main()
{
fin>>t;
for(int i=1; i<=t; i++)
{
fin>>n>>m>>x0;
ok=1;
for(int j=1; j<=n; j++)
fin>>sol[j];
for(int j=1; j<=m; j++)
{
fin>>x>>y>>z;
v[x].push_back( {y, z} );
v[y].push_back( {x, z} );
}
for(int j=1; j<=n; j++)
dist[j]=50000001;
dist[x0]=0;
dijkstra(x0);
for(int j=1; j<=n && ok; j++)
if(dist[j]!=sol[j])
ok--;
if(ok==0)
fout<<"NU\n";
else
fout<<"DA\n";
for(int j=1; j<=n; j++)
v[j].clear();
}
return 0;
}