Pagini recente » Cod sursa (job #1084137) | Cod sursa (job #32132) | Cod sursa (job #80392) | Cod sursa (job #754739) | Cod sursa (job #1740652)
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <queue>
#define N 50100
#define INF 2000000000
using namespace std;
class cmp{
public:
bool operator() ( pair<int,int> m1, pair<int,int> m2 ){
return m1.second>m2.second;
}
};
std::priority_queue <pair<int,int>, vector< pair<int,int> >,cmp > que;
vector < pair <int,int> > muc[N];
vector < pair<int , int> >::iterator it;
int n,m,source;
int dist[N],distzah[N];
int viz[N];
void INIT(){
static int i;
for(i=0;i<=n;i++){
dist[i]=INF;
muc[i].clear();
viz[i]=0;
}
}
void dijkstra(){
static int nod;
dist[source]=0;
que.push( make_pair( source,0) );
while(!que.empty() ){
while( !que.empty() && viz[ que.top().first ] ){
que.pop();
}
if(que.empty() ) {
break;
}
nod=que.top().first;
que.pop();
for( it=muc[nod].begin(); it!=muc[nod].end() ; it++){
if( viz[ it->first ] ){
continue;
}
if( dist[it->first]> dist[nod]+it->second ){
dist[it->first]=dist[nod]+it->second;
que.push( make_pair(it->first, dist[it->first] ) );
}
}
}
}
int main(){
int T,i;
int x,y,z,spy;
freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
scanf("%d",&T);
for(;T;T--){
scanf("%d%d%d",&n,&m,&source);
INIT();
for(i=1;i<=n;i++){
scanf("%d",&distzah[i]);
}
for(i=0;i<m;i++){
scanf("%d%d%d",&x,&y,&z);
muc[x].push_back( make_pair(y,z) );
muc[y].push_back( make_pair(x,z) );
}
dijkstra();
spy=0;
for(i=1;i<n;i++){
if(dist[i]!=distzah[i]){
printf("NU\n");
spy=1;
break;
}
}
if(spy==0){
printf("DA\n");
}
}
return 0;
}