比赛 EYOI与SBOI开学欢乐赛5th 评测结果 AAAAA
题目名称 最优连通子集 最终得分 100
用户昵称 nick 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2022-09-16 20:01:05
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
struct node{int to,next;}t[2005];
int n,i,j,cnt,ans=0x80000000;
int x[1005],y[1005],head[1005],dp[1005];
inline void add(int a,int b)
{
	t[++cnt].to=b;
	t[cnt].next=head[a];
	head[a]=cnt;
}
inline void dfs(int u,int fa)
{
	for(int i=head[u];i;i=t[i].next)
		if(t[i].to!=fa)
		{
			dfs(t[i].to,u);
			if(dp[t[i].to]>0)
				dp[u]=dp[u]+dp[t[i].to];
		}
	return;
}
int main()
{
	freopen("subset.in","r",stdin);
	freopen("subset.out","w",stdout);
	cin>>n;
	memset(head,0,sizeof(head));
	for(i=1;i<=n;i++)
		cin>>x[i]>>y[i]>>dp[i];
	for(i=1;i<n;i++)
		for(j=i+1;j<=n;j++)
			if(abs(x[i]-x[j])+abs(y[i]-y[j])==1)
				add(i,j),add(j,i);
	dfs(1,0);
	for(i=1;i<=n;i++)
		ans=max(ans,dp[i]);
	cout<<ans<<endl;
	return 0;
}