Pagini recente » Cod sursa (job #1325707) | Cod sursa (job #3285257) | Cod sursa (job #667321) | Cod sursa (job #24089) | Cod sursa (job #1045149)
#include<fstream>
#include<vector>
using namespace std;
const int MAXN=50005;
struct edge{int dest,cost;};
vector<edge> adj[MAXN];
ifstream fin("distante.in");
ofstream fout("distante.out");
int t,n,m,s;
int d[MAXN];
bool uz[MAXN];
void solve()
{
bool flag=true;
int u,v;
for (u=1; u<=n && flag; ++u)
{
for (vector<edge>::iterator v=adj[u].begin(); v!=adj[u].end(); ++v)
{
if (d[u]+v->cost<d[v->dest] || d[v->dest]+v->cost<d[u])
{
flag=false;
break;
}
if (d[u]+v->cost==d[v->dest])
uz[v->dest]=true;
if (d[v->dest]+v->cost==d[u])
uz[u]=true;
}
}
for (u=1; u<=n; ++u)
if (!uz[u])
flag=false;
if (flag)
fout<<"DA\n";
else
fout<<"NU\n";
}
void cleanup()
{
for (int i=1; i<=n; ++i)
{
while (!adj[i].empty())
{
adj[i].pop_back();
}
}
}
int main()
{
edge aux;
int a,b,c;
fin>>t;
for (int k=1; k<=t; ++k)
{
fin>>n>>m>>s;
for (int i=1; i<=n; ++i)
fin>>d[i];
for (int i=1; i<=m; ++i)
{
fin>>a>>b>>c;
aux.dest=b; aux.cost=c;
adj[a].push_back(aux);
aux.dest=a;
adj[b].push_back(aux);
}
solve();
cleanup();
}
fin.close();
fout.close();
return 0;
}