建议添加 HACK
查看原帖
建议添加 HACK
566935
timmark楼主2023/6/13 20:21

HACK数据:

7
1
2
3
4
5
6

graph6c1a4a90eaf68674.png

如果没有把 11 指向自己,下面这份代码的贪心策略就会出错。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=2e3+5;
int n,a,dep[maxn],f[maxn],ans;
bool vis[maxn];
pair <int,int> p[maxn];
vector <int> e[maxn];
void dfs(int now,int pre){
	f[now]=pre,dep[now]=dep[pre]+1;
	for(int i:e[now]) if(i!=pre) dfs(i,now);
}void color(int now,int pre,int dp){
	if(dp>2) return ;
	vis[now]=1;
	for(int i:e[now]) color(i,now,dp+1);
}signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin >> n ;
	for(int i=2;i<=n;i++) cin >> a ,e[i].push_back(a),e[a].push_back(i);
	dfs(1,0);
	for(int i=1;i<=n;i++) p[i]={dep[i],i};
	sort(p+1,p+n+1);
	for(int i=n;i;i--){
		if(!vis[p[i].second]){
			ans++;
			color(f[f[p[i].second]],0,0);
		}
	}cout << ans ;
	return 0;
}
2023/6/13 20:21
加载中...