比赛 EYOI与SBOI开学欢乐赛5th 评测结果 AAAAA
题目名称 最优连通子集 最终得分 100
用户昵称 yrtiop 运行时间 0.192 s
代码语言 C++ 内存使用 4.61 MiB
提交时间 2022-09-16 19:29:21
显示代码纯文本
#include <bits/stdc++.h>
#define pb emplace_back
#define mp std::make_pair
#define fir first
#define sec second
typedef std::pair<int,int> pii;

const int maxn = 1e3 + 5;
const int INF = 1e9;
struct node {
	int x,y,z;
	node() {
		x = y = z = 0;
	}
}a[maxn];
std::vector<int> G[maxn];
int n;

int dfs(int u,int fa) {
	int ans = a[u].z;
	for(auto& v : G[u]) {
		if(v == fa)continue ;
		ans += std::max(dfs(v , u) , 0);
	}
	return ans;
}

int main() {
	freopen("subset.in","r",stdin);
	freopen("subset.out","w",stdout);
	scanf("%d",&n);
	for(int i = 1;i <= n;++ i) {
		scanf("%d %d %d",&a[i].x,&a[i].y,&a[i].z);
		for(int j = 1;j < i;++ j) {
			if(std::abs(a[i].x - a[j].x) + std::abs(a[i].y - a[j].y) == 1) {
				G[i].pb(j);
				G[j].pb(i);
			}
		}
	}
	
	int ans = 0;
	for(int i = 1;i <= n;++ i) {
		ans = std::max(ans , dfs(i , 0));
	}
	
	printf("%d\n",ans);
	return 0;
}