Pagini recente » Cod sursa (job #2978310) | Cod sursa (job #1481021) | Cod sursa (job #1644400) | Cod sursa (job #2931441) | Cod sursa (job #2679392)
#include <fstream>
#include <vector>
#include <set>
#define DIM 100010
#define INF DIM*1000
using namespace std;
vector<pair <int, int> > L[DIM];
set< pair<int, int> >S;
int V[DIM],D[DIM],i,x,y,c,n,N,k,m,l,sol,T,SOL[DIM];
ifstream fin ("distante.in");
ofstream fout("distante.out");
int main()
{
fin>>T;
for(l=1;l<=T;l++)
{
fin>>n>>m>>N;
for(i=1;i<=n;i++)
fin>>SOL[i];
for(i=1;i<=m;i++)
{
fin>>x>>y>>c;
L[x].push_back(make_pair(y,c));
L[y].push_back(make_pair(x,c));
}
for(i=1;i<=n;i++)
D[i]=INF;
D[N]=0;
S.insert(make_pair(0,N));
while(!S.empty())
{
k=S.begin()->second;
S.erase(S.begin());
for(i=0;i<L[k].size();i++)
if(D[L[k][i].first]>D[k]+L[k][i].second)
{
S.erase(make_pair(D[L[k][i].first],L[k][i].first));
D[L[k][i].first]=D[k]+L[k][i].second;
S.insert(make_pair(D[L[k][i].first],L[k][i].first));
}
}
sol=1;
for(i=1;i<=n;i++)
{
if(D[i]!=SOL[i])
{
sol=0;
break;
}
}
if(sol==1)
fout<<"DA"<<"\n";
else
fout<<"NU"<<"\n";
}
}