Pagini recente » Cod sursa (job #1404642) | Cod sursa (job #2708677) | Cod sursa (job #1120110) | Cod sursa (job #805116) | Cod sursa (job #2709004)
#include <bits/stdc++.h>
#define INF 1000000000
using namespace std;
ifstream f("distante.in"); ofstream g("distante.out");
vector <pair<int,int> >L[50010];
set <pair<long long,int> >s;
int D[100010],verifD[50010],dc[50010];
int main()
{ int T;
f>>T;
for(int n,m,st;T;T--)
{ f>>n>>m>>st;
for(int i=1;i<=n;i++) f>>verifD[i];
for(int x,y,c,i=1;i<=m;i++)
{ f>>x>>y>>c;
L[x].push_back(make_pair(y,c));
L[y].push_back(make_pair(x,c));
}
for(int i=1;i<=n;i++) D[i]=INF;
D[st]=0;
s.insert(make_pair(0,st));
while(!s.empty())
{ int k=s.begin()->second;
s.erase(s.begin());
for(unsigned i=0;i<L[k].size();i++){
if(D[L[k][i].first]>D[k]+L[k][i].second)
{ s.erase ( make_pair(D[L[k][i].first],L[k][i].first));
D[L[k][i].first]=D[k]+L[k][i].second;
s.insert (make_pair(D[L[k][i].first],L[k][i].first));
}
}
}
int ok=1;
for(int i=1;i<=n;i++)
{ if(D[i]!=verifD[i]) ok=0;
L[i].clear();
}
if (ok==0) g<<"NU\n"; else g<<"DA\n";
}
g.close(); f.close(); return 0;
}