Pagini recente » Cod sursa (job #1019861) | Cod sursa (job #1280781) | Cod sursa (job #3214200) | Cod sursa (job #404917) | Cod sursa (job #2866572)
///dijkstra cu set
#include<bits/stdc++.h>
#define INF 100000000
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
int t,n,m,a[50002],d[50002];
vector< pair<int,int> >v[50002];
set< pair<int,int> >s;
void dijkstra(int nodsursa)
{
int i;
for(i=1;i<=n;i++)
d[i]=INF;
d[nodsursa]=0;
s.insert(make_pair(nodsursa,0));
while(!s.empty())
{
int nod=s.begin()->first;
int cost=s.begin()->second;
s.erase(make_pair(nod,cost));
if(d[nod]!=cost)
continue;
for(auto it:v[nod])
{
int nod1=it.first;
int c=it.second;
if(d[nod1]>cost+c)
{
d[nod1]=cost+c;
s.insert(make_pair(nod1,cost+c));
}
}
}
}
int main()
{
int i,l,nodsursa,x,y,z,ok;
f>>t;
for(l=1; l<=t; l++)
{
f>>n>>m>>nodsursa;
for(i=1; i<=n; i++)
f>>a[i];
for(i=1; i<=m; i++)
{
f>>x>>y>>z;
v[x].push_back(make_pair(y,z));
v[y].push_back(make_pair(x,z));
}
dijkstra(nodsursa);
ok=0;
for(i=1;i<=n;i++)
{
if(a[i]!=d[i])
{
ok=1;
break;
}
}
if(ok==1)
g<<"NU"<<'\n';
else
g<<"DA"<<'\n';
}
return 0;
}