#P5766. [NOI1999] 最优联通子集

[NOI1999] 最优联通子集

题目描述

众所周知,我们可以通过直角坐标系把平面上的任何一个点 PP 用一个有序数对 (x,y)(x,y) 来唯一表示,如果 x,yx,y 都是整数,我们就把点 PP 称为整点,否则点 PP 称为非整点。我们把平面上所有整点构成的集合记为 WW

定义 1 :两个整点 P1(x1,y1),P2(x2,y2)P_1(x_1,y_1),P_2(x_2,y_2),若 x1x2+y1y2=1|x_1-x_2|+|y_1-y_2|=1,则称 P1,P2P_1,P_2 相邻,记作 P1P_1~P2P_2 ,否则称 P1,P2P_1,P_2 不相邻。

定义 2 :设点集 SSWW 的一个有限子集,即 SS={P1,P2,,Pn}\{P_1,P_2,…,P_n\} (n1)(n \ge 1),其中 Pi(1in)P_i (1 \le i \le n) 属于 WW,我们把 SS 称为整点集。

定义 3 :设 SS 是一个整点集,若点 RR,TT 属于 SS ,且存在一个有限的点序列 Q1,Q2,,QkQ_1,Q_2,…,Q_k 满足:

  1. QiQ_i 属于 SS1ik 1 \le i \le k );
  2. Q1Q_1 = RR,QkQ_k = TT;
  3. QiQ_i~Qi+1(1ik1)Q_{i+1} (1 \le i \le k-1),即 QiQ_iQi+1Q_{i+1} 相邻;
  4. 对于任何 1i<jk1 \le i<j \le kQiQjQ_i≠Q_j;

我们则称点 RR 与点 TT 在整点集 SS 上连通,把点序列 Q1,Q2,,QkQ_1,Q_2,…,Q_k 称为整点集 SS 中连接点 RR 与点 TT 的一条道路。

定义 4 :若整点集 VV 满足:对于 VV 中的任何两个整点, VV 中有且仅有一条连接这两点的道路,则 VV 称为单整点集。

定义 5 :对于平面上的每一个整点,我们可以赋予它一个整数,作为该点的权,于是我们把一个整点集中所有点的权的总和称为该整点集的权和。

我们希望对于给定的一个单整点集 VV ,求出一个 VV 的最优连通子集 BB ,满足:

  1. BBVV 的子集
  2. 对于 BB 中的任何两个整点,在 BB 中连通;
  3. BB 是满足条件 (1) 和 (2) 的所有整点集中权和最大的。

输入格式

第一行是一个整数 NN ,表示单整点集 VV 中点的个数;

以下 NN 行中,第 ii(1iN)(1 \le i \le N) 有三个整数,Xi,Yi,CiX_i,Y_i,C_i 依次表示第 ii 个点的横坐标,纵坐标和权。同一行相邻两数之间用一个空格分隔。

输出格式

仅一个整数,表示所求最优连通集的权和。

5
0 0 -2
0 1 1
1 0 1
0 -1 1
-1 0 1
2