Pagini recente » Cod sursa (job #3186330) | Cod sursa (job #2582792) | Cod sursa (job #2356828) | Cod sursa (job #17498) | Cod sursa (job #952073)
Cod sursa(job #952073)
#include<iostream>
#include <fstream>
#include<vector>
#include<queue>
#include<cstdio>
#include<algorithm>
#define lim 60000
#define inf 1<<30
using namespace std;
class distante {
int t,n,m,s;
int dist[lim];
struct muchie
{
int nod;
int cost;
};
vector<muchie> G[lim];
int coada[lim];
fstream in,out;
public:
distante(string fin,string fout)
{
in.open(fin.c_str(), ios::in);
out.open(fout.c_str(), ios::out);
}
~distante()
{
in.close();
out.close();
}
void bf()
{
int f,l,x,y;
f=1;
l=1;
coada[1]=s;
for(int i=1;i<=n;i++)
{
dist[i]=inf;
}
dist[s]=0;
while(f<=l)
{
x=coada[f++];
for(int i=0;i<G[x].size();i++)
{
if(dist[G[x][i].nod]>dist[x]+G[x][i].cost)
{
coada[++l]=G[x][i].nod;
dist[G[x][i].nod]=dist[x]+G[x][i].cost;
}
}
}
}
void solve()
{
in>>t;
muchie a,b;
bool ok;
int d[lim];
while(t--)
{
in>>n>>m>>s;
for(int i=1;i<=n;i++)
{
in>>d[i];
}
for(int i=1;i<=m;i++)
{
in>>a.nod>>b.nod>>b.cost;
G[a.nod].push_back(b);
a.cost=b.cost;
G[b.nod].push_back(a);
}
}
if(d[s]==0)
{
bf();
ok=true;
for(int i=1;i<=n;i++)
{
if(d[i]!=dist[i])
{
out<<"NU"<<endl;
break;
ok=false;
}
}
if(ok==true)
{
out<<"DA"<<endl;
}
}
else
{
out<<"NU"<<endl;
}
}
};
int main()
{
distante X("distante.in","distante.out");
X.solve();
return 0;
}