Pagini recente » Cod sursa (job #1639845) | Cod sursa (job #1637528) | Cod sursa (job #2221268) | Cod sursa (job #1593440) | Cod sursa (job #1732170)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin ("distante.in");
ofstream fout ("distante.out");
vector<vector<pair<int, int> > > g;
vector<int> dist;
int n,m,s;
bool checkDijkstra()
{
if (dist[s] != 0)
return false;
vector<bool> found (n+1, false);
found[s] = true;
for (int i = 1; i <= n; i++)
{
// found = false;
if (i == s)
continue;
if (g[i].size() == 0)
{
found[i] = true;
continue;
}
for (int j = 0; j < g[i].size(); j++)
{
//if (g[i][j].first != s )
//{
if (dist[i] > dist[g[i][j].first] + g[i][j].second)
{
return false;
}
if (dist[i] == dist[g[i][j].first] + g[i][j].second)
{
found[i] = true;
}
//}
}
}
for (int i = 1; i<=n;i++)
{
if (found[i] == false)
return false;
}
return true;
}
int main()
{
int t;
fin>>t;
while (t != 0)
{
fin>>n>>m>>s;
g.resize(n+1);
dist.resize(n+1);
for (int i = 1; i <= n; i++)
fin>>dist[i];
for (int i = 1; i <= m; i++)
{
int a,b,c;
fin>>a>>b>>c;
g[a].push_back(make_pair(b,c));
g[b].push_back(make_pair(a,c));
}
if (checkDijkstra() == false)
{
fout<<"NU\n";
}
else
fout <<"DA\n";
t--;
}
}