Pagini recente » Cod sursa (job #2317386) | Cod sursa (job #1235884) | Cod sursa (job #3178387) | Cod sursa (job #811571) | Cod sursa (job #1610790)
#include<fstream>
#include <iostream>
#include<vector>
#include<queue>
#define inf 9999999999
#define mp make_pair
#define pb push_back
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
vector<vector<pair<int,int> > >a;
vector<int>d,dist;
priority_queue<pair<int,int> >q;
int n,m,s,t;
void dijkstra(int st)
{
d[st]=0;
q.push(mp(0,st)); // bag nodul in mult si dist pana la el
while(!q.empty())
{
int x=q.top().second;
q.pop();
for(vector<pair<int,int> >::iterator it=a[x].begin();it!=a[x].end();it++)
if(d[x]+it->second < d[it->first])
{
d[it->first]=d[x]+it->second;
q.push(mp(-d[it->first],it->first));
}
}
}
void afisare()
{
int i,ok=1;
for(i=1;i<=n;i++) if(d[i]!=dist[i]) {ok=0;break;}
if(ok==1) g<<"DA"<<"\n";
else g<<"NU"<<"\n";
}
void citire()
{
f>>t;
for(int i=1;i<=t;i++)
{
f>>n>>m>>s;
a=vector<vector<pair<int,int> > >(n+1);
d=vector<int>(n+1,inf);
dist=vector<int>(n+1);
for(int k=1;k<=n;k++) f>>dist[k];
for(int j=1;j<=m;j++)
{
int x,y,z;
f>>x>>y>>z;
a[x].pb(mp(y,z));
a[y].pb(mp(x,z));
}
dijkstra(s);
afisare();
}
}
int main()
{
citire();
return 0;
}