Mai intai trebuie sa te autentifici.
Cod sursa(job #2885513)
Utilizator | Data | 6 aprilie 2022 10:19:44 | |
---|---|---|---|
Problema | Distante | Scor | 0 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 1.38 kb |
#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=2;i<=n;i++)
D[i] = 100000;
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]!=F[i])
return false;
return true;
}
int main(int argc, char* argv[])
{
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;
}