Mai intai trebuie sa te autentifici.
Cod sursa(job #3267946)
Utilizator | Data | 13 ianuarie 2025 09:27:10 | |
---|---|---|---|
Problema | Distante | Scor | 100 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 1.5 kb |
#include <bits/stdc++.h>
using namespace std;
const int inf=10000000000;
const int nmax=50001;
int q;
int n,m,sursa;
int mockdist[nmax];
int dist[nmax];
vector<pair<int,int>>Graf[nmax];
void djikstra(int sursa)
{
for(int i=1;i<=n;i++)
dist[i]=inf;
dist[sursa]=0;
set<pair<int,int>> s;
s.insert({0,sursa});
while(!s.empty())
{
int nod=s.begin()->second;
s.erase(s.begin());
for(auto adj : Graf[nod])
{
if(dist[adj.first] > dist[nod] + adj.second)
{
s.erase({dist[adj.first],adj.first});
dist[adj.first]=dist[nod]+adj.second;
s.insert({dist[adj.first],adj.first});
}
}
}
bool ok=true;
for(int i=1;i<=n && ok;i++)
{
if(dist[i]!=mockdist[i])
ok=false;
}
if(ok)
cout << "DA\n";
else
cout<< "NU\n";
}
int main()
{
freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
cin >> q;
for(int graf=1; graf<=q; graf++)
{
cin >> n >> m >> sursa;
for(int i=1;i<=n;i++)
{
Graf[i].clear();
cin >> mockdist[i];
}
for(int i=1;i<=m;i++)
{
int nod1,nod2,cost;
cin >> nod1 >> nod2 >> cost;
Graf[nod1].push_back({nod2,cost});
Graf[nod2].push_back({nod1,cost});
}
djikstra(sursa);
}
return 0;
}