Pagini recente » Cod sursa (job #2175939) | Cod sursa (job #1527425) | Cod sursa (job #1191385) | Cod sursa (job #2684162) | Cod sursa (job #2085011)
// main.cpp : Defines the entry point for the console application.
//
#include <fstream>
#include <cstring>
#include <vector>
#include <queue>
#define NMAX 50001
#define INF 1000000000
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
int T, n, m, s, dmin[NMAX], sol[NMAX];
vector<int> V[NMAX], C[NMAX];
queue<int> Q;
void bellmanFord(int node) {
for(int i = 1; i <= n; i++) sol[i] = INF;
sol[node] = 0;
Q.push(node);
while(!Q.empty()) {
int x = Q.front();
Q.pop();
for(int i = 0; i < V[x].size(); i++) {
if(sol[V[x][i]] > sol[x] + C[x][i]) {
sol[V[x][i]] = sol[x] + C[x][i];
Q.push(V[x][i]);
}
}
}
}
int main()
{
fin >> T;
while(T--) {
fin >> n >> m >> s;
for(int i = 1; i <= n; i++) fin >> dmin[i];
int a, b, c;
while(m--) {
fin >> a >> b >> c;
V[a].push_back(b);
V[b].push_back(a);
C[a].push_back(c);
C[b].push_back(c);
}
bellmanFord(s);
bool ok = 1;
for(int i = 1; i <= n && ok; i++) {
if(dmin[i] != sol[i]) {
fout << "NU" << '\n';
ok = 0;
}
}
if(ok)
fout << "DA" << '\n';
for(int i = 1; i <= n; i++) {
if(!V[i].empty())
V[i].erase(V[i].begin(), V[i].begin() + V[i].size());
if(!C[i].empty())
C[i].erase(C[i].begin(), C[i].begin() + C[i].size());
}
}
return 0;
}