[题解]2023CCPC黑龙江省赛 - Folder

  • 来源:F.Folder - Codeforces
  • 题意:给定由\(n(1\le n\le 10^5)\)个结点组成的树,每次操作可将一棵子树接到其他结点上。求将树转换为一棵斜树的最小操作次数。
  • 关键词:思维(签到)
  • 题解:斜树中所有结点仅位于一侧子树,其仅有一个叶子节点。注意到根节点到叶子节点有且仅存在一条路径,因此每个叶子节点只需移动一次即可变为非叶子节点,最后仅保留一个叶子节点即可。故答案为叶子节点数-1。
  • 代码:
#include<bits/stdc++.h>

using namespace std;
using ll=long long;
#define int ll
#define endl "\n"

void solve(){
    int n;cin>>n;
    vector<bool>leaf(n+1,1);
    for(int i=1;i<n;i++){
        int _;cin>>_;
        leaf[_]=0;
    }
    int cnt=0;
    for(int i=1;i<=n;i++){
        if(leaf[i]) cnt++;
    }
    cout<<cnt-1<<endl;
}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0);
    int t=1;

    while(t--) solve();
    return 0;
}
posted @ 2025-05-10 22:04  椰萝Yerosius  阅读(8)  评论(0)    收藏  举报