45152023-03-29 12:05:35AGergoLogisztikai központcpp17Runtime error 20/5059ms128840 KiB
#include <bits/stdc++.h>

using namespace std;

//csak 1 út minden vársoba!
//jó város mindig a leghosszabb úton

vector<vector<int>> tav;
vector<vector<int>> gyerek;
vector<vector<int>> eljut;
int maxlen = 0, maxid;

void leghossz(int start,int cur, int dis)
    {
        for(int x : gyerek[cur])
        {
            if(tav[start][x] == -1)
            {
                tav[start][x] = dis + tav[cur][x];
                leghossz(start,x,dis + tav[cur][x]);
            }
        }
    }

    void leghosszut(int start,int cur, int dis, vector<int> jut)
    {
        for(int x : gyerek[cur])
        {
            if(tav[start][x] == -1)
            {
                tav[start][x] = dis + tav[cur][x];

                eljut[x] = jut;
                eljut[x].push_back(cur);

                leghosszut(start,x,dis + tav[cur][x],eljut[x]);
            }
        }
    }



int main()
{
    int varosszam;
    cin >> varosszam;

    int a,b;

    tav.resize(varosszam+1,vector<int>(varosszam+1,-1));
    gyerek.resize(varosszam+1);
    eljut.resize(varosszam+1);

    for(int i = 1; i < varosszam;i++)
    {
        tav[i][i] = 0;

        cin >> a >> b;

        cin >> tav[a][b];
        tav[b][a] = tav[a][b];

        gyerek[a].push_back(b);
        gyerek[b].push_back(a);
    }

    for(int x : gyerek[1])
    {
        leghossz(1,x,tav[1][x]);
    }

    for(int i = 1; i < varosszam+1;i++)
    {
        if(tav[1][i] > maxlen)
        {
            maxlen = tav[1][i];
            maxid = i;
        }
    }

    int v = maxid;

    for(int x : gyerek[v])
    {
        leghosszut(v,x,tav[v][x],{});
    }

    for(int i = 1; i < varosszam+1;i++)
    {
        if(tav[v][i] > maxlen)
        {
            maxlen = tav[v][i];
            maxid = i;
        }
    }

    int shortest;
    set<int> longests;

    if(tav[v][eljut[maxid][0]] >= maxlen - tav[v][eljut[maxid][0]])
    {
        shortest = tav[v][eljut[maxid][0]];
        longests.insert(eljut[maxid][0]);
    }
    else
    {
        shortest = maxlen - tav[v][eljut[maxid][0]];
        longests.insert(eljut[maxid][0]);
    }

    for(int x : eljut[maxid])
    {
        //cout << x << " ";
        if(tav[v][x] >= maxlen - tav[v][x] && tav[v][x] <= shortest)
        {
            if(tav[v][x] < shortest)
            {
                longests.clear();
            }
            shortest = tav[v][x];
            longests.insert(x);
        }
        else if(tav[v][x] < maxlen - tav[v][x] && maxlen - tav[v][x] <= shortest)
        {
            if(maxlen - tav[v][x] < shortest)
            {
                longests.clear();
            }
            shortest = maxlen - tav[v][x];
            longests.insert(x);
        }
    }

    //cout << '\n';

    cout << shortest << "\n" << longests.size() << "\n";
    for(int x : longests)
    {
        cout << x << " ";
    }
}
SubtaskSumTestVerdictTimeMemory
base20/50
1Accepted0/03ms1872 KiB
2Runtime error0/057ms128840 KiB
3Accepted4/43ms2300 KiB
4Partially correct2/43ms2520 KiB
5Accepted4/43ms2736 KiB
6Partially correct2/43ms2828 KiB
7Partially correct2/43ms3284 KiB
8Accepted5/58ms12680 KiB
9Runtime error0/248ms127752 KiB
10Runtime error0/256ms127520 KiB
11Partially correct1/24ms5600 KiB
12Runtime error0/210ms21520 KiB
13Runtime error0/256ms127512 KiB
14Runtime error0/259ms127388 KiB
15Runtime error0/259ms127388 KiB
16Runtime error0/248ms127144 KiB
17Runtime error0/259ms126908 KiB
18Runtime error0/257ms126904 KiB
19Runtime error0/256ms126888 KiB
20Runtime error0/348ms126776 KiB