谁能救救我,感觉很对0.0
查看原帖
谁能救救我,感觉很对0.0
1283531
Cerecry__mind楼主2024/7/4 16:44
#include<bits/stdc++.h>
using namespace std;
const int N= 1e6+10;
int n, k; using ll = long long ;
vector<int> p[N];int sel[N];
int dis[N];int far;
int fa[N];int flag[N];
void dfs(int u, int f){
    fa[u] = f;
    if(dis[u]> dis[far]) far = u;
    for(int i = 0; i<p[u].size();++i)
    {
        int v = p[u][i];
        if(v == f || flag[v]) continue;
        dis[v]= dis[u]+ 1;
        dfs(v, u);
    }
}
bool cmp(int a, int b){
return a > b;}
int max_deep[N];
void dfs2(int  u , int f){
    max_deep[u] = dis[u];
    for(int i = 0; i < p[u].size();++i)
    {
        int v = p[u][i];
        if(v== f)continue;
        dis[v] = dis[u]+1;
        dfs2(v, u);
        max_deep[u] = max(max_deep[u], max_deep[v]);
    }
}
int ans;
int main(){
    cin >> n >> k;
    for(int i = 1 ; i< n;++i)
    {   
        int uu, vv;
        cin >> uu >> vv;
        p[uu].push_back(vv);
    }
    int A, B;
    dis[1] = 0;dfs(1,0);A= far;
    dis[far]= 0;dfs(far, 0); B =far;
    int kk = B;
    for(int i =0; i< (dis[B]+1)/2;++i) kk = fa[kk];memset(dis,0,sizeof(dis));
    dfs2(kk, 0);
    for(int i = 1; i<= n;++i) sel[i]= max_deep[i]- dis[i];
    sort(sel+1, sel+1+n, cmp);
    int ret = 0;
    for(int i = k+1;i<= n;++i)ret= max(sel[i]+1, ret);
    cout << sel[k+1];
    return 0;
}
2024/7/4 16:44
加载中...