近视候任
查看原帖
近视候任
1347679
dream_NOI楼主2025/7/11 09:23

这道题的坑:用vector时,for循环一定不要写.size()-1,否则会死循环。

这道题我卡了半天,如果要用.size()-1,那么就要把他强转成int类型

WRONG CODE

#include<bits/stdc++.h>
using namespace std;
const int maxn=6010;
int h[maxn],vis[maxn],f[maxn][2],root,n;
vector<int> son[maxn];
void dfs(int x){
	f[x][0]=0;
	f[x][1]=h[x];
	//cout<<"111qdqhueHIF"<<endl;
	/*
	if(son[x].size()==0){
		return;
	}*/
	//cout<<son[x].size()<<" "<<son[x].size()-1<<endl;
	for(int i=0;i<=son[x].size()-1;i++){
		int y=son[x][i];
		//cout<<"222qdqhueHIF"<<endl;
		dfs(y);
		//cout<<"333qdqhueHIF"<<endl;
		f[x][0]+=max(f[y][0],f[y][1]);
		f[x][1]+=f[y][0];
	}
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>h[i];
	}
	for(int i=1;i<=n-1;i++){
		int l,k;
		cin>>l>>k;
		son[k].push_back(l);
		vis[l]=1;
	}
	for(int i=1;i<=n;i++){
		if(!vis[i]){
			root=i;
			break;
		}
	}
	dfs(root);
	//cout<<"444qdqhueHIF"<<endl;
	cout<<max(f[root][0],f[root][1]);
	return 0;
} 

一定要小心这个坑啊!!!!!

2025/7/11 09:23
加载中...