Pagini recente » Cod sursa (job #1944735) | Cod sursa (job #438451) | Cod sursa (job #689729) | Cod sursa (job #29352) | Cod sursa (job #423484)
Cod sursa(job #423484)
#include<fstream>
#include<vector>
#include<queue>
#define inf 2147483646
#define dmax 50002
using namespace std;
vector<int> a[dmax];
vector<int> c[dmax];
int n;
long dist[dmax],d[dmax];
void djikstra(int s)
{
int i,elem;
queue<int> q;
for (i=1; i<=n; i++)
d[i]=inf;
d[s]=0;
q.push(s);
while (q.size())
{
elem=q.front();
for (i=0; i<a[elem].size(); i++)
if (d[a[elem][i]] > d[elem] + c[elem][i] )
{
d[a[elem][i]]=d[elem]+c[elem][i];
q.push(a[elem][i]);
}
q.pop();
}
}
int main()
{
int t,k,m,s,i,x,y,z,ok;
ifstream fin("distante.in");
ofstream fout("distante.out");
fin>>t;
for (k=1; k<=t; k++)
{
fin>>n>>m>>s;
for (i=1; i<=n; i++)
fin>>dist[i];
for (i=1; i<=m; i++)
{
fin>>x>>y>>z;
a[x].push_back(y);
a[y].push_back(x);
c[x].push_back(z);
c[y].push_back(z);
}
djikstra(s);
ok=0;
for (i=1; i<=n; i++)
{
if (dist[i]!=d[i])
{
ok=1;
break;
}
a[i].clear();
}
if (ok==0)
fout<<"DA"<<'\n'; else
fout<<"NU"<<'\n';
}
return 0;
}