Pagini recente » Cod sursa (job #217619) | Cod sursa (job #3154202) | Cod sursa (job #2967248) | Cod sursa (job #440970) | Cod sursa (job #766959)
Cod sursa(job #766959)
#include<iostream>
#include<fstream>
#include<queue>
#include<vector>
#include<cstring>
#include<bitset>
using namespace std;
struct s{int n,c;};
int n,m,S,dist[50001],bronz[50001];
vector <s> a[50001];
void belman_ford(int nod)
{
queue <int> q;
int i,c,costc;
q.push(nod);
while (!q.empty())
{
nod=q.front();
q.pop();
for (i=0;i<a[nod].size();i++)
{
c=a[nod][i].n;
costc=a[nod][i].c;
if (dist[c]==0 || dist[c]>dist[nod]+costc)
{
dist[c]=dist[nod]+costc;
q.push(c);
}
}
}
}
int check()
{
int i;
for(i=1;i<=n;i++)
if (dist[i]!=bronz[i])
return 0;
return 1;
}
void zero(int a[], int n)
{
int i;
for (i=1;i<=n;i++)
a[i]=0;
}
int main(void)
{
fstream f,g;
f.open("distante.in",ios::in);
g.open("distante.out",ios::out);
int t,q,i,x;
f>>t;
s z,l;
for (q=1;q<=t;++q)
{
f>>n>>m>>S;
for (i=1;i<=n;i++)
{
f>>bronz[i];
a[i].clear();
}
for (i=1;i<=m;i++)
{
f>>x>>z.n>>z.c;
a[x].push_back(z);
l.n=x;
l.c=z.c;
a[z.n].push_back(l);
}
zero(dist,n);
belman_ford(S);
dist[S]=0;
if (check())
g<<"DA\n";
else
g<<"NU\n";
}
}