Pagini recente » Cod sursa (job #3234299) | Cod sursa (job #279477) | Cod sursa (job #2943942) | Cod sursa (job #279961) | Cod sursa (job #641241)
Cod sursa(job #641241)
#include <vector>
#include <set>
#include <fstream>
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
#define INF 0x3f3f3f
int t, n, m, src;
set<pair<int, int> > T;
vector <int> C[50001], G[50001];
void Pr();
void Citire(int b[10]);
void Afis(int a[10], int b[10]);
void Dijkstra(int src, int d[10] );
void Goleste();
int main()
{
fin >> t;
while(t--)
Pr();
fin.close();
fout.close();
return 0;
}
void Pr()
{
int d[50001], s[50001];
Citire(s);
Dijkstra(src, d);
Afis(d, s);
Goleste();
}
void Citire(int b[10])
{
fin >> n >> m >> src;
for ( int i = 1; i <= n; ++i )
fin >> b[i];
int x, y, z;
while(m--)
{
fin >> x >> y >> z;
G[x].push_back(y);
C[x].push_back(z);
G[y].push_back(x);
C[y].push_back(z);
}
}
void Dijkstra(int src,int d[10])
{
for ( int i = 1; i <= n; ++i )
d[i] = INF;
d[src] = 0;
int nod, y;
T.insert(make_pair(0, src));
while(!T.empty())
{
nod = (*T.begin()).second;
T.erase(T.begin());
for ( int i = 0; i < (int)G[nod].size(); ++i )
{
y = G[nod][i];
if ( d[y] > d[nod]+C[nod][i] )
{
d[y] = d[nod] + C[nod][i];
T.insert(make_pair(d[y], y));
}
}
}
}
void Afis(int a[10], int b[10])
{
for ( int i = 1; i <= n; ++i )
if ( a[i] != b[i] )
{
fout << "NU" << '\n';
return;
}
fout << "DA" << '\n';
}
void Goleste()
{
for ( int i = 1; i <= n; ++i )
{
G[i].clear();
C[i].clear();
}
}