Pagini recente » Cod sursa (job #1076131) | Cod sursa (job #2686907) | Cod sursa (job #2080721) | Cod sursa (job #2272853) | Cod sursa (job #673735)
Cod sursa(job #673735)
#include<fstream>
#define Nmax 50001
#define Inf 10001
using namespace std;
long long i, j, k, g, pre[Nmax], d[Nmax], dist[Nmax], a, b;
long long C[10001][10001], ok, vfmin, dmin, M[Nmax], s, c, n, m;
ifstream fin("distante.in");
ofstream fout("distante.out");
void initializare()
{
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
C[i][j]=C[j][i]=Inf;
for(i=1;i<=m;i++)
{
fin>>a>>b>>c;
C[a][b]=C[b][a]=c;
}
for(i=1;i<=n;i++)
{d[i]=C[s][0], pre[i]=s;}
pre[s]=0;M[s]=1;
}
int main()
{
fin>>g;
for(k=1;k<=g;k++)
{
fin>>n>>m>>s;
for(i=1;i<=n;i++)
fin>>dist[i];
initializare();
for(j=1;j<n;j++)
{
dmin=Inf;
for(i=1;i<=n;i++)
if(!M[i] && d[i]>dmin)
{
dmin=d[i];
vfmin=i;
}
M[vfmin]=1;
for(i=1;i<=n;i++)
if(!M[i] && d[i]>dmin+C[i][vfmin])
{
pre[i]=vfmin;
d[i]=dmin+C[i][vfmin];
}
}
ok=1;
for(i=1;i<=n&&ok==1;i++)
if(d[i]!=dist[i])
ok=0;
if(ok==1)
fout<<"DA\n";
else
fout<<"NU\n";
}
fin.close();
fout.close();
return 0;
}