0pts秋条
查看原帖
0pts秋条
339335
cougarmace楼主2025/7/19 09:52
#include"bits/stdc++.h"
using namespace std;
typedef long long ll;
typedef pair<ll,ll>PLL;
const ll maxn=1e6+10,mod=1e9+7,inf=0x3f3f3f3f;
ll n,k,flg[maxn],u,v,deep[maxn],tickAns,timeAns,cut[maxn];
vector<ll>edge[maxn];
void fDeep(ll x){
    for(int i=0;i<edge[x].size();i++){
        ll v=edge[x][i];
        deep[v]=deep[x]+1;
        tickAns=max(tickAns,deep[v]);
        fDeep(v);
    }
}void fCut(ll x){
    //cout<<x<<' ';
    if(edge[x].size()==0){
        cut[x]=tickAns-deep[x];
        return ;
    }
    for(int i=0;i<edge[x].size();i++){
        ll v=edge[x][i];
        fCut(v);
        cut[x]=min(cut[v],cut[x]);
    }for(int i=0;i<edge[x].size();i++){
        ll v=edge[x][i];
        if(cut[v]!=cut[x])timeAns++;
    }
}
void fTime(ll x){
    if(edge[x].size()==0)return ;
    timeAns+=(k-edge[x].size());
    for(int i=0;i<edge[x].size();i++){
        ll v=edge[x][i];
        fTime(v);
    }
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    memset(cut,0x3f,sizeof cut);
    cin>>n>>k;
    for(int i=1;i<n;i++){
        cin>>u>>v;
        edge[u].push_back(v);
    }fDeep(1);
    fCut(1);
    //cout<<endl;
    fTime(1);
    //for(int i=1;i<=n;i++)cout<<cut[i]<<' ';
    cout<<tickAns<<' '<<timeAns<<endl;
    return 0;
}//-fsanitize=address
/*
4 2
1 2
1 3
3 4*/
2025/7/19 09:52
加载中...