15982022-11-28 20:33:34kicsiboglarLogisztikai központcpp11Hibás válasz 1/50151ms25724 KiB
#include <iostream>
#include <vector>
#include <deque>
#define ll long long 

using namespace std;

struct element
{
    bool seen = false;
    vector <pair<ll, ll> > sz;
    ll step, dis, from;
};
ll n, a, b, c, i, j, start;
vector <element> x;

void bfs(ll act)
{
    deque<ll> v;
    v.push_back(act);
    x[act].seen = true;
    ll curr;
    while (!v.empty())
    {
        curr = v[0];
        v.pop_front();
        for (auto& e : x[curr].sz)
        {
            if (!x[e.first].seen)
            {
                x[e.first].dis = x[curr].dis + e.second;
                x[e.first].from = curr;
                x[e.first].seen = true;
                x[e.first].step = x[curr].step + 1;
                v.push_back(e.first);
            }
        }
    }
}
int main()
{
    cin >> n;
    x.resize(n + 1);
    for (i = 1; i < n; ++i)
    {
        cin >> a >> b >> c;
        x[a].sz.push_back({ b,c });
        x[b].sz.push_back({ a,c });
    }


    bfs(1);
    ll maxi = 0;
    for (i = 1; i <= n; ++i)
    {
        if (x[i].dis > maxi)
        {
            maxi = x[i].dis;
            start = i;
        }
        x[i].seen = false;
        x[i].dis = 0;
        x[i].step = 0;
    }


    bfs(start);
    ll pos = 0;
    maxi = 0;
    for (i = 1; i <= n; ++i)
    {
        if (x[i].dis > maxi)
        {
            maxi = x[i].dis;
            pos = i;
        }
        x[i].seen = false;
      
    }



    ll middle = x[pos].dis / 2,pos2=pos;

    while (x[pos2].dis>middle)
    {
        pos2 = x[pos2].from;
    }

    cout << pos2;
    /*
    maxi = max(x[pos].dis - x[pos2].dis, x[pos2].dis);



    ll maxii = 999999;
    ll o = 0;
    if (x[pos].step % 2 != 0)
    {
        o = x[pos2].from;
        maxii = max(x[pos].dis - x[o].dis, x[o].dis);
    }
    cout << min(maxi, maxii)<<"\n";
    if (maxi == maxii)
    {
        cout << "2\n";
        cout << maxi << " " << maxii;
    }
    else
    {
        cout << "1\n";
        if (maxi < maxii) cout << pos2;
        else cout << o;
    }*/
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base1/50
1Hibás válasz0/03ms1680 KiB
2Hibás válasz0/0126ms21008 KiB
3Hibás válasz0/42ms2056 KiB
4Hibás válasz0/42ms2288 KiB
5Hibás válasz0/42ms2336 KiB
6Hibás válasz0/42ms2448 KiB
7Hibás válasz0/42ms2472 KiB
8Hibás válasz0/53ms2896 KiB
9Hibás válasz0/2151ms24192 KiB
10Hibás válasz0/2144ms24540 KiB
11Hibás válasz0/23ms3448 KiB
12Részben helyes1/23ms3604 KiB
13Hibás válasz0/28ms4276 KiB
14Hibás válasz0/214ms5296 KiB
15Hibás válasz0/2137ms22836 KiB
16Hibás válasz0/2127ms22144 KiB
17Hibás válasz0/2142ms23648 KiB
18Hibás válasz0/2105ms18848 KiB
19Hibás válasz0/2145ms25724 KiB
20Hibás válasz0/3143ms25212 KiB