Ciao, di recente ho cominciato ad imparare le tecniche di base per risolvere problemi con i grafi. Per adesso sono riuscito a completare sentieri, licenziamenti, ponti, monete, ciclismo, dessert e trip.
Quali altri problemi, di circa questo livello, mi consigliate di provare?
Per adesso sono fermo su waterslide a 45/100 perché tre subtests vanno fuori tempo. Questo è il codice:
#include <bits/stdc++.h>
int main()
{
std::ifstream ifs("input.txt");
std::ofstream ofs("output.txt");
std::ios::sync_with_stdio(false);
ifs.tie(0);
int N = 0, M = 0, P = 0;
ifs >> N >> M >> P;
std::list<int> junctions[N];
for(int i = 0, A, B; i < M; ++i){
ifs >> A >> B;
junctions[A].push_back(B);
}
std::vector<long double> pools(N, 0.0);
std::unordered_map<int, long double> q;
q.insert(std::make_pair(0, 1.0));
while(!q.empty()){
auto n = q.begin();
if(junctions[n->first].size() == 0){
pools[n->first] += n->second;
}
for(const auto& next : junctions[n->first]){
q[next] += n->second / (long double) junctions[n->first].size();
}
q.erase(n);
}
auto ret = std::max_element(pools.cbegin(), pools.cend());
ofs << ret - pools.cbegin();
return 0;
}