Pagini recente » Istoria paginii runda/testeaza/clasament | Cod sursa (job #503610) | Clasament 0training | Cod sursa (job #632518) | Cod sursa (job #2885522)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
//ifstream fin("date.in");
//ofstream fout("date.out");
int n,m,T;
int D[100000],F[100000];
priority_queue< pair<int, int> , vector< pair<int, int> >, greater< pair<int, int> > > Q;
vector < vector < pair <int, int> > > G(100000);
bool dijkstra(int s){
for(int i=1;i<=n;i++)
D[i] = 100000;
D[s]=0;
Q.push({0, s});
while(!Q.empty()){
int dist = Q.top().first;
s = Q.top().second;
Q.pop();
if(dist > D[s])
continue;
for(auto x:G[s])
if(D[x.first] > dist + x.second)
{
D[x.first] = dist + x.second;
Q.push({D[x.first], x.first});
}
}
for(int i=1;i<=n;i++)
if(D[i]!=100000&&D[i]!=F[i])
return false;
return true;
}
int main()
{
int x, y, c, s;
fin>>T;
while(T)
{
fin>>n>>m>>s;
for(int i=1;i<=n;i++)
fin>>F[i];
for(int i=0;i<m;i++)
{
fin>>x>>y>>c;
G[x].push_back({y, c});
}
if(dijkstra(s))
fout<<"DA\n";
else
fout<<"NU\n";
T--;
}
fin.close();
fout.close();
return 0;
}