Pagini recente »
Cod sursă (job #721209)
|
Clasament concurs2-cls5-11-01-2020
|
Cod sursă (job #446622)
|
Istoria paginii runda/pregatire_sector_clasa_a_vii-a_runda_2
|
Cod sursă (job #429330)
Cod sursă (job
#429330)
#include <fstream>
#include <vector>
using namespace std;
ifstream in("dragoni2.in");
ofstream out("dragoni2.out");
const int oo = (1 << 30);
int n, m, p, v[801], MAX1;
long long distanta[801];
bool vizitat[801];
vector < pair <int, int> > Muchii[801];
void DFS(int nod, int eDragon)
{
int vecin, cost;
if (v[nod] > MAX1)
MAX1 = v[nod];
vizitat[nod] = 1;
for (int i = 0; i < Muchii[nod].size(); ++i)
{
vecin = Muchii[nod][i].first;
cost = Muchii[nod][i].second;
if (vizitat[vecin] == 0 && cost <= eDragon)
DFS(vecin, eDragon);
}
}
void DFS2(int nod, int eDragon)
{
int vecin, cost;
if (v[nod] > eDragon)
eDragon = v[nod];
vizitat[nod] = 1;
for (int i = 0; i < Muchii[nod].size(); ++i)
{
vecin = Muchii[nod][i].first;
cost = Muchii[nod][i].second;
if (cost <= eDragon)
{
if (vizitat[vecin] == 0 || distanta[nod] + cost < distanta[vecin] || vecin == 1)
{
distanta[vecin] = distanta[nod] + cost;
DFS2(vecin, eDragon);
}
}
}
}
void rezolvare1()
{
MAX1 = v[1];
DFS(1, v[1]);
out << MAX1;
}
void rezolvare2()
{
distanta[1] = 0;
DFS2(1, v[1]);
out << distanta[n];
}
void citire()
{
int x, y, c;
in >> p >> n >> m;
for (int i = 1; i <= n; ++i)
in >> v[i];
for (int i = 1; i <= m; ++i)
{
in >> x >> y >> c;
Muchii[x].push_back(make_pair(y, c));
Muchii[y].push_back(make_pair(x, c));
}
if (p == 1)
rezolvare1();
else
{
for (int i = 2; i <= n; ++i)
distanta[i] = oo;
rezolvare2();
}
}
int main()
{
citire();
return 0;
}