Cerința
Porumbeii au pornit un război crâncen împotriva ciorilor, dar ele au construit garduri defensive pe toate rutele pe care le-ar putea folosi armata porumbeilor pentru a le ataca cetatea. Pentru a ajunge la cetatea ciorilor armata trebuie sa treacă de gardurile construite de ciori.
Pentru că porumbeii obosesc din cauza zborului ei trebuie sa se odihneasca pe statui, astfel armata poate merge doar pe drumurile cunoscute dintre două statui. Există n
statui, iar armata se află inițial pe statuia cu numărul 1
, iar cetatea ciorilor se va afla pe cea cu numărul n
.
Armata porumbeilor deține un cioc bionic de putere K
. Acesta poate sparge garduri cu rezistență mai mica sau egala cu K
, armata putând astfel să treacă pe acel drum.
Generalul armatei porumbeilor vă cere să găsiți puterea minimă pe care o poate avea ciocul bionic pentru ca armata să poată ajunge la cetatea ciorilor.
Date de intrare
Fișierul de intrare Ohoo.in
va conține:
Pe prima linie numărul natural n
reprezentând numărul de statui și numărul natural m
reprezentând numărul de drumuri existente între statui.
Pe următoarele m
linii se vor găsi câte 3 numere: x
, y
, r
, cu semnificația că există un drum bidirecțional între statuile x
și y
blocat de un gard de rezistență r
.
Date de ieșire
Fișierul de ieșire Ohoo.out
va conține un singur număr natural K
, reprezentând puterea minimă pe care o poate avea ciocul bionic astfel încât armata să poată ajunge la cetatea ciorilor.
Restricții și precizări:
2 ≤ n ≤ 100.000
1 ≤ m ≤ 250.000
- Rezistențele gardurilor sunt numere naturale nenule și nu depășesc
1.000.000
- Între două statui pot exista mai multe drumuri cu garduri de rezistențe diferite
- Întotdeauna există soluție
- Pentru
60%
din testen ≤ 1000
șiK ≤ 1000
- Se acordă
10
puncte pentru exemplu - Atenție la numele fișirelor de intrare și de ieșire!
Exemplu
Ohoo.in
5 6 1 2 3 1 4 1 2 3 2 3 5 3 4 5 4 3 4 4
Ohoo.out
3
Explicație
Alegem drumul 1-2-3-5
folosind o putere maximă de 3
.
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema Ohoo:
#include <bits/stdc++.h>
#define NM 100005
using namespace std;
ifstream fin ("Ohoo.in");
ofstream fout ("Ohoo.out");
void read();
int n, m, maxx, st, dr, rez, mijl;
vector<pair<int,int>> v[NM];
bitset<NM> viz;
bool ok(int nod)
{
if(viz[n])
return 1;
bool gasit = 0;
viz[nod] = 1;
if(nod == n)
return 1;
for(auto it:v[nod])
if(!viz[it.first] && it.second <= mijl)
gasit|=ok(it.first);
return gasit;
}
int main()
{
read();
st = 1, dr = maxx, rez = maxx;
while(st<=dr)
{
mijl = (st+dr)/2;
viz.reset();
if(ok(1))
{
rez = mijl;
dr = mijl-1;
}
else st = mijl+1;
}
fout << rez;
return 0;
}
void read()
{
fin >> n >> m;
for(int i=1; i<=m; i++)
{
int x, y, p;
fin >> x >> y >> p;
maxx = max(maxx, p);
v[x].push_back({y, p});
v[y].push_back({x, p});
}
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #3325 Ohoo
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #3325 Ohoo de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!