Pagini recente » Cod sursa (job #1318059) | Cod sursa (job #3041329) | Cod sursa (job #2596569) | Cod sursa (job #1626271) | Cod sursa (job #2102787)
#include <bits/stdc++.h>
using namespace std;
vector <int> AD[50001],COST[50001];
int v[50001],viz[50001],dmin[50001];
void dfs(int x)
{
// int ;
viz[x]=1;
for(int i=0; i<AD[x].size(); i++)
if(!viz[AD[x][i]])
{
dmin[AD[x][i]]=dmin[x]+COST[x][i];
dfs(AD[x][i]);
}
else
if(dmin[AD[x][i]]>dmin[x]+COST[x][i])
{
dmin[AD[x][i]]=dmin[x]+COST[x][i];
dfs(AD[x][i]);
}
}
int main()
{
int t,ct,n,m,s,i,a,b,c;
ifstream f("distante.in");
ofstream g("distante.out");
f >> t;
for(ct=0; ct<t; ct++)
{
f >> n >> m >> s;
for(i=1; i<=n; i++)
f >> v[i];
for(i=0; i<m; i++)
{
f >> a >> b >> c;
AD[a].push_back(b);
COST[a].push_back(c);
AD[b].push_back(a);
COST[b].push_back(c);
}
dfs(s);
for(i=1; i<=n && v[i]==dmin[i]; i++);
if(i>n) g << "DA\n";
else g << "NU\n";
memset(v+1,0,n);
memset(viz+1,0,n);
memset(dmin+1,0,n);
for(i=1; i<=n; i++)
{
AD[i].clear();
COST[i].clear();
}
}
return 0;
}