Pagini recente » Istoria paginii runda/cariera_1/clasament | Cod sursa (job #2848094) | Istoria paginii runda/oni_2017_11-12 | Cod sursa (job #330910) | Cod sursa (job #1315991)
#include <fstream>
#include <vector>
using namespace std;
ifstream is("distante.in");
ofstream os("distante.out");
int T, n, m, s, d[50001];
vector<pair<int, int > > G[50001];
bool Read();
bool exista, ok = true;
int main()
{
is >> T;
for ( int t = 0; t < T; ++t )
{
if( Read() )
{
os << "DA\n";
/*
for ( int i = 1; i <= n; ++i )
{
exista = false;
for ( const auto& c: G[i] )
if ( d[i] + c.second == d[c.first] || d[c.first] + c.second == d[i])
{
exista = true;
break;
}
if ( exista == false )
{
os << "NU\n";
ok = false;
break;
}
}
if ( ok )
os << "DA\n";
*/
}
else
os << "NU\n";
}
is.close();
os.close();
return 0;
}
bool Read()
{
is >> n >> m >> s;
for ( int i = 1; i <= n; ++i )
{
G[i].clear();
is >> d[i];
if ( i == s && d[i] != 0 )
return false;
}
for ( int i = 0, x, y, c; i < m; ++i )
{
is >> x >> y >> c;
if ( d[x] + c < d[y] || d[y] + c < d[x] )
return false;
G[x].push_back({y, c});
G[y].push_back({x, c});
}
return true;
}