Pagini recente » Cod sursa (job #2453250) | Cod sursa (job #1271436) | Cod sursa (job #153732) | album2 | Cod sursa (job #2059876)
#include<fstream>
#include<queue>
#include<vector>
#define maxn 100001
#define INF 0x3f3f3f3f
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
queue <int> q;
vector <int> G[maxn], C[maxn];
int i,n,m,x,y,c,d[maxn],cor[50001],t,s,ver1;
int main()
{
f>>ver1;
for(int ver=1;ver<=ver1;ver++)
{
f>>n>>m>>s;
for(int k=1;k<=n;k++)
{
f>>cor[k];
}
t=m;
while(t--)
{
f>>x>>y>>c;
G[x].push_back(y);
C[x].push_back(c);
}
for(i=1;i<=n;i++)
{
if(i!=s)
d[i]=INF;
}
d[s]=0;
q.push(s);
while(!q.empty())
{
x=q.front();
for(i=0;i<G[x].size();i++)
if(d[G[x][i]]>d[x]+C[x][i])
{
d[G[x][i]]=d[x]+C[x][i];
q.push(G[x][i]);
}
q.pop();
}
int ok=1;
for(i=1;i<=n;i++)
{
if(cor[i]!=d[i])
{
ok=0;
break;
}
}
if(!ok)
g<<"NU"<<'\n';
else
g<<"DA"<<'\n';
}
return 0;
}