Nu aveti permisiuni pentru a descarca fisierul grader_test4.in
Cod sursa(job #2679215)
| Utilizator | Data | 29 noiembrie 2020 23:01:29 | |
|---|---|---|---|
| Problema | Distante | Scor | 40 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva de probleme | Marime | 1.46 kb |
#include <fstream>
#include <vector>
#include <set>
#define INF 2000000000
using namespace std;
vector <pair<int, int> >L[50010];
set <pair<long long, int> >s;
int n,m,i,x,y,c,st,k,ok,t,T;
int D[100010],verifD[50010],dc[50010];
int main() {
ifstream fin("distante.in");
ofstream fout("distante.out");
fin>>T;
for (t=1;t<=T;t++){
fin>>n>>m>>st;
for (i=1;i<=n;i++){
fin>>verifD[i];
}
for (i=1;i<=m;i++) {
fin>>x>>y>>c;
L[x].push_back(make_pair(y,c));
L[y].push_back(make_pair(x,c));
}
for (i=1;i<=n;i++){
D[i]=INF;
}
D[st]=0;
s.insert(make_pair(0,st));
while (!s.empty()){
k=s.begin()->second;
s.erase(s.begin());
for (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));
}
}
}
ok=1;
for (i=1;i<=n;i++){
if (D[i]!=verifD[i]){
ok=0;
break;
}
L[i].clear();
}
if (ok==0){
fout<<"NU\n";
}
else{
fout<<"DA\n";
}
}
return 0;
}
