Pagini recente » Cod sursa (job #2718129) | Cod sursa (job #2354466) | Cod sursa (job #1722376) | Cod sursa (job #896721) | Cod sursa (job #2006426)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
vector < pair<int,int> > graf[100] ;
int d[100] ;
class comparvf
{
public:
bool operator () ( int &a , int &b )
{
return d[a] > d[b] ;
}
};
priority_queue <int,vector<int> , comparvf> H ;
int n , m , nod , dz[100] ;
ifstream fin ("distante.in") ;
ofstream fout("distante.out") ;
void citire ()
{
int x , y , c , j ;
fin >> n >> m >> nod ;
for ( j = 1 ; j <= n ; j++ )
fin >> dz[j] ;
for ( j = 1 ; j <= m ; j++ )
{
fin >> x >> y >> c;
graf[x].push_back(make_pair(y,c)) ;
graf[y].push_back(make_pair(x,c)) ;
}
}
void dijkstra()
{
int p , j ;
H.push(nod) ;
for ( j = 1 ; j <= n ; j++ )
d[j] = 1001 ;
d[nod] = 0 ;
while ( !H.empty() )
{
//cout << " ahile " ;
p = H.top() ;
H.pop() ;
for ( j = 0 ; j < graf[p].size() ; j++ )
{
if ( d[graf[p][j].first] > graf[p][j].second + d[p] )
{
//cout << " bag in " << graf[p][j].first << " pe " ;
d[graf[p][j].first] = graf[p][j].second + d[p] ;
//cout << d[graf[p][j].first]<< endl ;
//cout << " ajung in if " ;
H.push(graf[p][j].first) ;
}
}
}
}
int main()
{
int i , j , NR ;
bool corect ;
fin >> NR ;
for ( i = 1 ; i <= NR ; i++ )
{
citire() ;
dijkstra() ;
corect = true ;
for ( j = 1 ; j <= n ; j++ )
if ( d[j] != dz[j] )
corect = false ;
if ( corect == true )
fout << "DA" ;
else
fout << "NU" ;
for ( j = 1 ; j <= n ; j++ )
graf[i].clear() ;
fout << endl ;
}
}