Pagini recente » Cod sursa (job #1171115) | Cod sursa (job #2242205) | Cod sursa (job #29013) | Cod sursa (job #665123) | Cod sursa (job #3227014)
#include <bits/stdc++.h>
#define Nmax 101
#define INF 1<<30
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
int n, m, t, s;
vector<pair<int, int>> G[Nmax];
int dist_prob[Nmax];
int dist[Nmax];
struct comp
{
bool operator()(int a, int b)
{
return dist[a]>dist[b];
}
};
void Dijkstra(int start)
{
priority_queue<int, vector<int>, comp> Q;
dist[start]=0;
Q.push(start);
while(!Q.empty())
{
int nod=Q.top();
Q.pop();
for(auto& i:G[nod])
{
int vecin=i.first;
int cost=i.second;
if(dist[nod]+cost<dist[vecin])
{
dist[vecin]=dist[nod]+cost;
Q.push(vecin);
}
}
}
}
int main() {
fin >> t;
for (int k = 1; k <= t; k ++) {
fin >> n >> m >> s;
for (int i = 1; i <= n; i ++)
fin >> dist_prob[i];
while (m -- ) {
int x, y, cost;
fin >> x >> y >> cost;
G[x].push_back({y, cost});
G[y].push_back({x, cost});
}
for (int i = 1; i <= n; i ++)
dist[i] = INF;
Dijkstra(s);
int ok = 1;
for (int i = 1; i <= n; i ++)
if (dist[i] != dist_prob[i]) {
fout << "NU" << '\n';
ok = 0;
break;
}
if (ok)
fout << "DA" << '\n';
}
}