Pagini recente » Rating Petrenco Elena (petrenco_elena) | Cod sursa (job #138794) | Cod sursa (job #2616560) | Cod sursa (job #2424028) | Cod sursa (job #1478036)
#include <iostream>
#include <fstream>
#include <vector>
#include <set>
#include <algorithm>
#include <queue>
#include <utility>
#define NMAX 50005
#define INF 5000
#define nod second
#define cost first
using namespace std;
ifstream in("distante.in");
ofstream out("distante.out");
int n,m,t,xx,yy,s,cc,dc[NMAX],d[NMAX],val,y;
vector<int> a[NMAX],c[NMAX];
priority_queue< pair<int,int> > T;
void init()
{
in >> n >> m >> s;
for(int i=1;i<=n;i++)
{
d[i]=INF;
a[i].clear();
c[i].clear();
}
}
void citire()
{
for(int i=1;i<=n;i++)
in >> dc[i];
for(int i=0;i<m;i++)
{
in >> xx >> yy >> cc;
a[xx].push_back(yy);
a[yy].push_back(xx);
c[xx].push_back(cc);
c[yy].push_back(cc);
}
d[s]=0;
}
void dijkstra()
{
T.push(make_pair(0,s));
while(!T.empty())
{
val = T.top().cost;
y = T.top().nod;
T.pop();
for(int i=0;i<a[y].size();i++)
{
if(d[a[y][i]]> val + c[y][i])
{
d[a[y][i]]= val + c[y][i];
T.push(make_pair(d[a[y][i]],a[y][i]));
}
}
}
}
void afisare()
{
for(int i=1;i<=n;i++)
if(d[i]!=dc[i])
{
out << "NU\n";
return;
}
out << "DA\n";
}
int main()
{
in >> t;
for(int i=0;i<t;i++)
{
init();
citire();
dijkstra();
afisare();
}
return 0;
}