Pagini recente » Borderou de evaluare (job #1176345) | Borderou de evaluare (job #2080211) | Borderou de evaluare (job #1731593) | Cod sursa (job #2588395) | Cod sursa (job #640292)
Cod sursa(job #640292)
#include <fstream>
#include <vector>
#include <queue>
#define PII pair<int,int>
#define st first
#define nd second
#define MP make_pair
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
const int INF = int(2e9);
bool u[50002];
int N , M , S , D[50002] , dd[50002];
void solve_test()
{
fin>>N>>M>>S;
queue<int> Q;
vector< PII > G[50001];
int x , y , c;
for(int i=1;i<=N;++i)
fin>>dd[i] , D[i] = INF;
for(fin>>N>>M>>S;M;M--)
{
fin>>x>>y>>c;
G[x].push_back(MP(y,c));
G[y].push_back(MP(x,c));
}
D[S] = 0; u[S] = 1;
for(Q.push(S);!Q.empty();)
{
x = Q.front() , Q.pop();
u[x] = 0;
for(vector< PII >::const_iterator w = G[x].begin();w!=G[x].end();++w)
if(D[w->st] > D[x] + w->nd)
{
D[w->st] = D[x] + w->nd ;
if(u[w->st]==0)
u[w->st] = 1 , Q.push(w->st);
}
}
for(int i = 1; i <= N;++i)
if(D[i]!=dd[i]) { fout<<"NU\n"; return; }
fout<<"DA\n";
}
int main()
{
int T;
for(fin>>T;T;T--)
solve_test();
return 0;
}