Pagini recente » Cod sursa (job #1353275) | Cod sursa (job #1329261) | Cod sursa (job #317549) | Cod sursa (job #1305802) | Cod sursa (job #1206652)
#include <fstream>
#include <queue>
#include <vector>
#define INF 0x3f3f3f
using namespace std;
ifstream is ("distante.in");
ofstream os ("distante.out");
vector <pair <int, int> > V[50001];
priority_queue <pair<int, int>, vector<pair <int, int> >, greater<pair <int, int> > > Q;
//vector<int> d, a;
int a[50001], d[50001];
int n, m, t, s, q;
void Read();
void Dijkstra();
int main()
{
is >> t;
for(int k = 1; k <= t; ++k)
{
Read();
Dijkstra();
q = 0;
for(int i = 1; i <= n; ++i)
if(a[i] != d[i])
os << "NU" << '\n', i = n+1, q++;
if(q == 0)
os << "DA" << '\n';
for(int i = 1; i <= n; ++i)
V[i].clear();
//a.clear();
//d.clear();
}
is.close();
os.close();
return 0;
}
void Read()
{
int x, y, z;
is >> n >> m >> s;
//a.resize(n+1, 0);
//d.resize(n+1, INF);
for(int i = 1; i <= n; ++i)
{
is >> x;
a[i] = x;
d[i] = INF;
}
for(int i = 1; i <= m; ++i)
{
is >> x >> y >> z;
V[x].push_back(make_pair(y, z));
V[y].push_back(make_pair(x, z));
}
d[s] = 0;
Q.push(make_pair(0, s));
}
void Dijkstra()
{
int nod, x;
while(!Q.empty())
{
nod = Q.top().second;
x = Q.top().first;
Q.pop();
for(unsigned i = 0; i < V[nod].size(); ++i)
{
if(d[V[nod][i].first] > x + V[nod][i].second)
{
d[V[nod][i].first] = x + V[nod][i].second;
Q.push(make_pair(d[V[nod][i].first], V[nod][i].first));
}
}
}
}