Pagini recente » Cod sursa (job #2226810) | Cod sursa (job #2934329) | Cod sursa (job #1217875) | Cod sursa (job #1720651) | Cod sursa (job #2802831)
#include <iostream>
#include <vector>
#include <queue>
#include <fstream>
using namespace std;
auto cmp = [](pair <int, int> x, pair <int, int> y) {
return (x.first > y.first) || (x.first == y.first && x.second > y.second);
};
ifstream f("distante.in");
ofstream g("distante.out");
vector<pair<int,int>> v[100003];
priority_queue<pair<int,int>, vector<pair <int, int>>, decltype(cmp)> pq(cmp);
//priority_queue<pair<int,int>, vector<pair <int, int>>, greater<pair <int, int>> ()> pq(cmp);
int viz[50005];
int cost[50005];
int dist[50005];
int main() {
int n,m,s,a,b,c,x,y,t,ok;
f>>t;
for(int p=1;p<=t;p++){
f>>n>>m>>s;
for(int i=1;i<=n;i++)
f>>dist[i];
for(int i=1;i<=n;i++)
v[i].clear();
for(int i=1;i<=m;i++){
f>>a>>b>>c;
v[a].push_back({b,c});
v[b].push_back({a,c});
}
for (int i = 1; i <= n; ++i)
cost[i] = 1e9;
for (int i = 1; i <= n; ++i)
viz[i] = 0;
pq.push({0,s});
cost[s]=0;
while(!pq.empty()){
x=pq.top().first;
y=pq.top().second;
pq.pop();
if(viz[y])
continue;
viz[y]=1;
for(int i=0;i<v[y].size();i++){
if(!viz[v[y][i].first]&&cost[v[y][i].first]>x+v[y][i].second){
cost[v[y][i].first]=x+v[y][i].second;
pq.push({cost[v[y][i].first],v[y][i].first});
}
}
}
ok=1;
for(int i=1;i<=n&&ok;i++)
if(cost[i]!=dist[i])
ok=0;
g<<(ok==1?"DA\n":"NU\n");
}
f.close();
g.close();
return 0;
}