poj1192 最优连通子集(树形dp)

题目链接:poj1192 最优连通子集
0025A14E求一棵无向树的最大子树和。。类似于求最大子段和的办法,树形dp。

dp[i][0]:以i为根,不包括 i 结点的子树最大权

dp[i][1]:以i为根,包括 i 结点的子树的最大权

dp[i][0] = max(dp[j][0] , dp[j][1])   (j 为 i 的儿子)

dp[i][1] +=  dp[j][1] (dp[j][1] > 0,j 为 i 的儿子)

 

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<cmath>
 4 #include<algorithm>
 5 #define CLR(a,b) memset((a),(b),sizeof((a)))
 6 using namespace std;
 7 const int N = 1001;
 8 const int inf = 0x3f3f3f3f;
 9 int n, cnt;
10 int dp[N][2];
11 int head[N];
12 bool vis[N];
13 struct edge{
14     int nex, to;
15 }e[N*N];
16 struct point{
17     int x, y, c;
18 }p[N];
19 void add(int u, int v){
20     e[cnt].to = v;
21     e[cnt].nex = head[u];
22     head[u] = cnt++;
23 }
24 void dfs(int u){
25     vis[u] = 1;
26     dp[u][0] = 0;  dp[u][1] = p[u].c;
27     for(int i = head[u]; ~i; i = e[i].nex){
28         int v = e[i].to;
29         if(!vis[v]){
30             dfs(v);
31             dp[u][0] = max(dp[u][0], max(dp[v][0], dp[v][1]));
32             if(dp[v][1] > 0)
33                 dp[u][1] += dp[v][1];
34         }
35     }
36 }
37 int main(){
38     int i, j, ans;
39     scanf("%d", &n);
40     CLR(head, -1);  CLR(dp, 0);  CLR(vis, 0);
41     cnt = 0;
42     for(i = 1; i <= n; ++i){
43         scanf("%d%d%d", &p[i].x, &p[i].y, &p[i].c);
44         for(j = 1; j < i; ++j){
45             if(abs(p[i].x - p[j].x) + abs(p[i].y - p[j].y) == 1){
46                 add(i, j); add(j, i);
47             }
48         }
49     }
50     dfs(1);
51     ans = max(dp[1][0], dp[1][1]);
52     printf("%d\n", ans);
53     return 0;
54 }
View Code

 

posted @ 2016-10-07 15:12  GraceSkyer  阅读(357)  评论(0编辑  收藏  举报

~~~~~~ACM大牛语录,激励一下~~~~~~

为了世界的和平,为了女生的安全,我拼命做题,做题,做题!

用最短的时间,刷最多的题!

给我一滴泪,我就看到了你全部的海洋!

seize the hour, seize the day.

人生难免有无奈,幸福走远了,或是感叹幸福来迟了.其实我一直相信,无论手中的幸福是多么微不足道的感觉,我会把握住那每一分,每一秒,当幸福依旧像那百鸟般飞逝,终究无法掌握时,我会感谢它,曾经降临过!

A自己的题,让别人郁闷去吧

WA肠中过,AC心中留 TLE耳边过,AC特别牛

天然的悲苦和伤逝,过去有过,以后还会有

^*^一步一步往上爬^*^

AC就像练级,比赛就像PK. 练级不如PK好玩

其实,世上本没有ACM,AC的人多了,也便有了!

AC无止尽~ Seek you forever~

找呀找呀找水题,找到一个AC一个呀!

AC是检验程序的唯一标准。

真的猛士,敢于直面惨淡的人生,敢于正视淋漓的鲜血……