Pagini recente » Cod sursa (job #2896130) | Cod sursa (job #1752293) | Cod sursa (job #3237118) | Cod sursa (job #3294031) | Cod sursa (job #903894)
Cod sursa(job #903894)
#include<fstream>
#include<vector>
#include<queue>
#define inf 5000000
#define Mmax 50001
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
struct punct
{
int x,c;
};
vector < punct > a[Mmax];
vector <int> d(Mmax,inf);
queue <int> q;
int n,m,x,y,z,s,corect,nod,cost,aux,T,test[Mmax];
void dijkstra(int s)
{
q.push(s);
d[s]=0;
while(!q.empty())
{
aux=q.front();
q.pop();
for(unsigned int i=0;i<a[aux].size();++i)
{
cost=a[aux][i].c;
nod=a[aux][i].x;
if(d[nod]>d[aux]+cost)
{
d[nod]=d[aux]+cost;
q.push(nod);
}
}
}
}
int main()
{
f>>T;
for(;T--;)
{
f>>n>>m>>s;
for(register int i=1;i<=n;i++)
f>>test[i];
punct aux1;
for(register int i=1;i<=m;++i)
{
f>>x>>y>>z;
aux1.x=y;
aux1.c=z;
a[x].push_back(aux1);
}
dijkstra(s);
corect=1;
for(register int i=1;i<=n;++i)
if(d[i]!=test[i])
{
corect=0;
i=n+1;
}
if(corect)
g<<"DA\n";
else
g<<"NU\n";
}
return 0;
}