Pagini recente » Cod sursa (job #915198) | Cod sursa (job #468266) | Cod sursa (job #1688243) | Cod sursa (job #1041313) | Cod sursa (job #688454)
Cod sursa(job #688454)
#include <stdio.h>
#include <vector>
#include <deque>
using namespace std;
struct muchie
{
int sf, cost;
muchie() {}
muchie(int a, int b)
{
sf = a;
cost = b;
}
};
const int inf = 60000000;
vector<muchie> *v;
deque<int> coada;
int i, n, start, end, cost;
int *d2;
void dijkstra(int src)
{
for(i = 1; i <= n; d2[i++] = inf);
d2[src] = 0;
coada.push_back(src);
while(!coada.empty())
{
start = coada.front();
if(d2[start] != inf)
for(i = 0; i < (signed)v[start].size(); i++)
{
end = v[start][i].sf;
cost = v[start][i].cost;
if(d2[start] + cost < d2[end])
{
d2[end] = d2[start] + cost;
coada.push_back(end);
}
}
coada.pop_front();
}
}
int main()
{
freopen("distante.in", "r", stdin);
freopen("distante.out", "w", stdout);
int t, x, y, c, m, s;
int *d;
scanf("%d", &t);
while(t--)
{
scanf("%d %d %d", &n, &m, &s);
v = new vector<muchie>[n + 1];
d = new int[n + 1];
d2 = new int[n + 1];
for(i = 1; i <= n; i++)
scanf("%d", d+i);
for(i = 0; i < m; i++)
{
scanf("%d %d %d", &x, &y, &c);
v[x].push_back(muchie(y, c));
v[y].push_back(muchie(x, c));
}
dijkstra(s);
for(i = 1; i <= n; i++)
if(d[i] != d2[i])
{
printf("NU\n");
break;
}
if(i == n + 1)
printf("DA\n");
}
}