#include "dreaming.h" #include using namespace std; vector gozd[100005]; vector teza[100005]; bool obiskan[100005]; pair razdalja(int poz, int stars){//najde najbolj oddaljeno vozlisce pair naj = make_pair(0,poz); for(int i=0;i curr = razdalja(gozd[poz][i],poz); curr.first+=teza[poz][i]; if (curr.first>naj.first)naj = curr; } return naj; } int polmer(int poz, int stars, int cilj, int premer, int razdalja){ int naj = max(razdalja,premer-razdalja); bool na_poti = (poz == cilj); obiskan[poz]=1; for(int i=0;i polmeri; for(int i=0;i konec = razdalja(i,-1); pair drug_konec = razdalja(konec.second,-1);//drug_konec je zdaj (premer, drug konec premera) rezultat = max(rezultat, drug_konec.first); polmeri.push_back(polmer(konec.second,-1,drug_konec.second,drug_konec.first,0)); } sort(polmeri.begin(),polmeri.end()); reverse(polmeri.begin(),polmeri.end()); if(polmeri.size()>1) rezultat = max(polmeri[0]+polmeri[1]+L,rezultat); if(polmeri.size()>2) rezultat = max(polmeri[2]+polmeri[1]+2*L,rezultat); return rezultat; }