Pagini recente » Cod sursa (job #3214648) | Cod sursa (job #603342) | Cod sursa (job #388279) | Cod sursa (job #987429) | Cod sursa (job #524688)
Cod sursa(job #524688)
#include<fstream>
#include<vector>
#include<queue>
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
const int N=50001,inf=1<<30;
vector<int> v[N],c[N];
queue<int> d;
int n,m,s,t,e[N],ver[N];
void bfs(int s)
{
int i;
d.push(s);
e[s]=0;
while(!d.empty())
{
for(i=0;i<v[d.front()].size();i++)
{
if(e[v[d.front()][i]] > e[d.front()] + c[d.front()][i])
{
d.push(v[d.front()][i]);
e[v[d.front()][i]]=e[d.front()]+c[d.front()][i];
}
}
d.pop();
}
}
int main()
{
int i,j,x,y,co;
bool ok;
f>>t;
for(i=1;i<=t;i++)
{
f>>n>>m>>s;
for(j=1;j<=n;j++)
{
f>>ver[j];
v[j].clear();
c[j].clear();
}
for(j=1;j<=n;j++)
{
f>>x>>y>>co;
v[x].push_back(y);
v[y].push_back(x);
c[x].push_back(co);
c[y].push_back(co);
}
//memset(e,inf,sizeof(e));
for(j=1 ; j<=n ; ++j)
e[j] = inf;
bfs(s);
ok=true;
for(j=1;j<=n&&ok;j++)
if(ver[j]!=e[j])
ok=false;
if(ok)
g<<"DA\n";
else
g<<"NU\n";
}
return 0;
}