Pagini recente » Cod sursa (job #1282696) | Cod sursa (job #385177) | Cod sursa (job #2975810) | Cod sursa (job #348916) | Cod sursa (job #593317)
Cod sursa(job #593317)
#include<fstream>
#define NMAX 22000
#define MMAX 100000
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
int a[NMAX][NMAX],n,i,j,m,cost,s,t,x,y,z;
int c[NMAX];
void lungime_drumuri()
{
int i,j,k;
for( k = 1 ; k <= n ; k++ )
for( i = 1 ; i <= n ; i++ )
for( j = 1 ; j <= n ; j++ )
if( i != j && j != k && i != k && a[i][k] && a[k][j] && (a[i][j] > a[i][k] + a[k][j] || !a[i][j]) )
a[i][j] =a[i][k] + a[k][j];
}
int main()
{
f>>t;
int gasit=0;
while(t)
{
f>>n>>m>>s;
for(i=1;i<=n;i++)
f>>c[i];
for(i=1;i<=m;i++)
{
f>>x>>y>>z;
a[x][y]=a[y][x]=z;
}
lungime_drumuri();
for(i=1;i<=n;i++)
{
if(c[i]==a[s][i])
gasit=1;
else
gasit=0;
}
if(gasit)
g<<"DA"<<"\n";
else
g<<"NU"<<"\n";
t--;
}
return 0;
}