Pagini recente » Cod sursa (job #155760) | Cod sursa (job #2439139) | Cod sursa (job #1239920) | Cod sursa (job #1517652) | Cod sursa (job #2971684)
#include <bits/stdc++.h>
using namespace std;
#define INF 1e9
vector<pair<int,int>> graf[60005]; /// unul este pentru nodul asociat muchiei iar celalata locatie este alocata pentru cost
int d[60005], c[60005];
int main(void){
ofstream cout("distante.out");
ifstream cin("distante.in");
int T;
cin >> T;
while(T--){
int n,m, s;
cin >> n >> m >> s;
for(int i =1;i<=n;i++){
cin >> c[i];
}
for(int i = 1;i<=m;i++){
int x, y, z;
cin >> x >> y >> z;
graf[x].push_back({z,y});
}
for(int i = 1;i<=n;i++){
d[i] = INF;
}
d[s] = 0;
set<pair<int,int>> st;
st.insert({0,s});
while(!st.empty()){
int k = st.begin() -> second;
st.erase(st.begin());
for(auto nod: graf[k]){
int vec = nod.second;
int cost = nod.first;
if(d[vec] > d[k] + cost){ /// acutalizam
st.erase({d[vec],vec});
d[vec] = d[k] + cost;
st.insert({d[vec], vec});
}
}
}
bool ok = 0;
for(int i = 2;i<=n;i++){
if(d[i] != c[i]){
cout << "NU";
ok = 1;
break;
}
}
if(!ok){
cout << "DA";
}
cout << '\n';
for(int i = 1;i<=n;i++){
graf[i].clear();
}
}
}