社区讨论

90分WA最后一个点,求调,赏悬关注一个

P1122最大子树和参与者 3已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@m2liyysx
此快照首次捕获于
2024/10/23 15:00
去年
此快照最后确认于
2025/11/04 16:27
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
struct edge{
	int to,nxt;
}e[1100010];
bool vis[1090001],bz[1000001];
int n,m,head[1000110],len,f[1000011][2];
void add(int u,int v){
	e[++len].nxt=head[u];
	e[len].to=v;
	head[u]=len;
}
void dfs(int u){
	vis[u]=1;
	for(int i=head[u];i ;i=e[i].nxt){
//		if(e[i].to==fa)continue;
		if(vis[e[i].to])continue;
		dfs(e[i].to);
		f[u][1]+=max(f[e[i].to][1],f[e[i].to][0]);
		f[u][0]+=f[e[i].to][0];
	}
}
int u,v;
int main(){
	cin>>n;
	for(int i=1;i<=n;++i){
		cin>>f[i][1];
	} 
	for(int i=1;i<n;++i){
		cin>>u>>v;
		bz[u]=1;
		add(v,u);
	}
	for(int i=1;i<=n;++i){
		if(!bz[i]){
			dfs(i);
			cout<<max(f[i][1],f[i][0]);
			return 0;
		}
	}
} 
//最后一个点给的是负数,我这个打法答案是负数好像不太行

回复

5 条回复,欢迎继续交流。

正在加载回复...