Pagini recente » Cod sursa (job #481089) | Cod sursa (job #711353) | Cod sursa (job #951691) | Cod sursa (job #1173934) | Cod sursa (job #2829461)
#include<bits/stdc++.h>
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
struct CustomCompare{
bool operator()(const pair<int,int> &a, const pair<int,int> &b){
return a.second>b.second;
}
};
vector<pair<int,int>> adjList[1001];
vector<int> isMarked,length;
priority_queue<pair<int,int>,vector<pair<int,int>>,CustomCompare>heap;
void Dijkstra(int x){
int i;
isMarked[x]++;
for(i=0;i<adjList[x].size();++i){
if(isMarked[adjList[x][i].first]==0){
pair<int,int> aux;
heap.push(make_pair(adjList[x][i].first,adjList[x][i].second+length[x]));
}
}
pair<int,int> frt;
while(heap.size()>0){
frt=heap.top();
heap.pop();
if(isMarked[frt.first]==0){
length[frt.first]=frt.second;
Dijkstra(frt.first);
}
}
}
int main(){
int t,a,b,c;
int n,m,s;
vector<string> ans;
vector<int> zaharel,res;
f>>t;
int i,j,k;
while(t>0){
f>>n>>m>>s;
length.clear();
isMarked.clear();
while(!heap.empty())
heap.pop();
for(j=0;j<n;++j){
isMarked.push_back(0);
length.push_back(0);
}
zaharel.clear();
for(j=0;j<n;++j)
{
f>>a;
zaharel.push_back(a);
}
for(j=0;j<m;++j){
f>>a>>b>>c;
adjList[a-1].push_back(make_pair(b-1,c));
adjList[b-1].push_back(make_pair(a-1,c));
}
Dijkstra(s-1);
if(zaharel==length){
ans.push_back("DA");
}
else{
ans.push_back("NU");
}
for(j=0;j<n;++j){
adjList[j].clear();
}
/*for(i=0;i<length.size();++i){
g<<length[i]<<" ";
}
g<<endl;*/
t--;
}
for(i=0;i<ans.size();++i){
g<<ans[i]<<'\n';
}
return 0;
}