记录编号 575652 评测结果 AAAAA
题目名称 [NOI 1999]最优连通子集 最终得分 100
用户昵称 Gravatarムラサメ 是否通过 通过
代码语言 C++ 运行时间 0.000 s
提交时间 2022-09-25 09:26:45 内存使用 0.00 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,cnt,maxn;
int h[200010],f[200010];
struct sa{
	int nxt;
	int to;
}e[200010];
struct node{
	int x,y,val;
}a[200010];
bool check(int u,int v){
	if(abs(a[u].x-a[v].x)+abs(a[u].y-a[v].y)==1){
		return true;
	}
	return false;
}
void add(int u,int v){
	e[++cnt]=(sa){h[u],v};
	h[u]=cnt;
}
void dfs(int x,int fa){
	f[x]=a[x].val;
	for(int i=h[x];i;i=e[i].nxt){
		int y=e[i].to;
		if(y==fa){
			continue;
		}
		dfs(y,x);
		if(f[y]>0){
			f[x]+=f[y];
		}
	}
	return;
}
int main(){
	freopen("subset.in","r",stdin);
	freopen("subset.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i].x>>a[i].y>>a[i].val;
	}
	for(int i=1;i<n;i++){
		for(int j=i+1;j<=n;j++){
			if(check(i,j)){
				add(i,j);
				add(j,i);
			}
		}
	}
	dfs(1,0);
	for(int i=1;i<=n;i++){
		maxn=max(maxn,f[i]);
	}
	cout<<maxn<<endl;
	return 0;
}