292702026-06-09 09:41:51KristófTitkos társaság alcsoport ***cpp17Elfogadva 100/10081ms5396 KiB
#include <iostream>
#include <vector>
#include <set>
using namespace std;

vector<int> dist;
vector<int> meret;
vector<bool> perfect;
vector<vector<int>> g;

void dfs(int s)
{
bool kidp=true;
set<int> meretek;
for(int x:g[s])
    {
    dist[x]=dist[s]+1;
    dfs(x);
    meretek.insert(meret[x]);
    meret[s]+=meret[x];
    kidp=(perfect[x]&&kidp);
    }

if(kidp && (g[s].size()==0 || g[s].size()==2) && (meretek.size()==1 || g[s].size()==0))perfect[s]=true;
}


int main()
{
    int k;
    int n;cin>>n>>k;
    dist.resize(n+1,1);
    meret.resize(n+1,1);
    g.resize(n+1);
    vector<bool> root(n+1,true);
    perfect.resize(n+1,false);
    for(int i=0;i<n-1;i++)
        {
        int x,y;cin>>x>>y;
        g[x].push_back(y);
        root[y]=false;
        }
    int start;
    for(int i=1;i<=n;i++)
        if(root[i])start=i;
    dfs(start);
    pair<int,int> ans;
    ans={0,0};
    for(int i=1;i<=n;i++)
        {
        if(!perfect[i])continue;
        if(meret[i]<k)continue;
        if(dist[i]>ans.second)
            {
            ans.second=dist[i];
            ans.first=i;
            }
        else if(dist[i]==ans.second && i<ans.first)ans.first=i;
        }
    cout<<ans.first;
    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base100/100
1Elfogadva6/61ms316 KiB
2Elfogadva6/61ms316 KiB
3Elfogadva6/61ms316 KiB
4Elfogadva6/61ms316 KiB
5Elfogadva6/61ms316 KiB
6Elfogadva7/71ms508 KiB
7Elfogadva7/71ms316 KiB
8Elfogadva7/71ms316 KiB
9Elfogadva7/71ms316 KiB
10Elfogadva7/72ms316 KiB
11Elfogadva7/72ms548 KiB
12Elfogadva7/741ms2728 KiB
13Elfogadva7/781ms5396 KiB
14Elfogadva7/71ms316 KiB
15Elfogadva7/750ms3280 KiB