45392023-03-29 13:42:58AGergoLogisztikai központcpp17Futási hiba 8/5059ms128840 KiB
#include <bits/stdc++.h>

using namespace std;

//csak 1 �t minden v�rsoba!
//j� v�ros mindig a leghosszabb �ton

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

void leghossz(int start,int cur,long 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,long 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()
{
    ios::sync_with_stdio(0);
    cin.tie(0);

    int varosszam;
    cin >> varosszam;

    int a,b;

    tav.resize(varosszam+1,vector<long 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;
        }
    }

    long 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 = 1; x < varosszam; x++)
    {
        //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 << " ";
    }
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base8/50
1Elfogadva0/03ms1896 KiB
2Futási hiba0/056ms128840 KiB
3Elfogadva4/43ms2316 KiB
4Elfogadva4/43ms2532 KiB
5Hibás válasz0/43ms2888 KiB
6Hibás válasz0/43ms2844 KiB
7Hibás válasz0/43ms3496 KiB
8Hibás válasz0/59ms20476 KiB
9Futási hiba0/248ms127760 KiB
10Futási hiba0/248ms127728 KiB
11Hibás válasz0/24ms7416 KiB
12Futási hiba0/218ms38960 KiB
13Futási hiba0/259ms127616 KiB
14Futási hiba0/248ms127348 KiB
15Futási hiba0/257ms127124 KiB
16Futási hiba0/257ms126888 KiB
17Futási hiba0/257ms126876 KiB
18Futási hiba0/257ms126876 KiB
19Futási hiba0/248ms126636 KiB
20Futási hiba0/348ms126620 KiB