Pagini recente » Cod sursa (job #2275362) | Cod sursa (job #2245376) | Cod sursa (job #562817) | Cod sursa (job #3178849) | Cod sursa (job #3180738)
#include <bits/stdc++.h>
#define oo 2e9
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
int n,m,s,T;
vector<pair<int,int>> L[105];
priority_queue<pair<int,int>> q;
int dd[50005],d[50005],viz[50005];
void Reset()
{
int i;
for(i=1;i<=n;i++)
{
d[i]=oo;
viz[i]=0;
L[i].clear();
}
}
void Dijkstra(int s)
{
int k,cost,i;
for(i=1;i<=n;i++)
{
viz[i]=0;
d[i]=oo;
}
d[s]=0;
q.push({0,s});
while(!q.empty())
{
k=q.top().second;
q.pop();
if(viz[k]==0)
{
viz[k]=1;
for(auto e:L[k])
{
i=e.first;
cost=e.second;
if(d[i]>d[k]+cost)
{
d[i]=d[k]+cost;
q.push({-d[i],i});
}
}
}
}
for(i=1;i<=n;i++)
if(d[i]!=dd[i]) {fout<<"NU\n"; return;}
fout<<"DA\n";
}
int main()
{
int i,j,k,c;
fin>>T;
for(k=1;k<=T;k++)
{
fin>>n>>m>>s;
for(i=1;i<=n;i++)
fin>>dd[i];
while(m--)
{
fin>>i>>j>>c;
L[i].push_back({j,c});
L[j].push_back({i,c});
}
Dijkstra(s);
Reset();
}
fin.close();
fout.close();
return 0;
}