0分求调(闭关)
查看原帖
0分求调(闭关)
1064274
dgz61楼主2025/8/31 19:54
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,k,x,Max=INT_MIN;
vector<ll> v[100000+10];
bool vis[100000+10];
struct node{
	ll cd,id;
}a[100000+10];
bool cmp(node n1,node n2){
    if(n1.cd==n2.cd) return n1.id<n2.id;
	return n1.cd>n2.cd;
}
void dfs(ll u,ll val){
	if(vis[u]==true) return ;
	Max=max(Max,val);
	for(auto it:v[u]) dfs(it,val+v[u].size());
}
int main(){
	cin>>n>>k;
    for(ll i=1;i<=n;i++) a[i].id=i;
	for(ll i=1;i<n;i++){
		cin>>x;
		a[x].cd++;
		v[x].push_back(i+1);
	}
	sort(a+1,a+n,cmp);
	for(ll i=1;i<=k;i++) vis[a[i].id]=true;
	for(ll i=1;i<=n;i++) dfs(i,1);
	cout<<Max;
	return 0;
} 

思路是将出度最多的几个封死,在遍历一遍

2025/8/31 19:54
加载中...