pku1192 最优连通子集

http://poj.org/problem?id=1192

题目大意:有一棵树,节点有整型的权值,

如果定义,树中所有节点的权值和为树的权值,题目是求权值最大的子树

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <vector>
 4 
 5 #define N 1010
 6 
 7 using namespace std;
 8 
 9 int n, x[N], y[N], c[N], mark[N] = {0};
10 vector<int> a[N];
11 
12 int abs(int x)
13 {
14     return x<0? -x: x;
15 }
16 
17 int dfs(int x)
18 {
19     int i, j, temp, sum = c[x];
20     for(i=0; i<a[x].size(); i++)
21     {
22         j = a[x][i];
23         if(mark[j] == 0)
24         {
25             mark[j] = 1;
26             temp = dfs(j);
27             if(temp > 0)
28             {
29                 sum += temp;
30             }
31         }
32     }
33     return sum;
34 }
35 
36 int main()
37 {
38     int i, j;
39     scanf("%d", &n);
40     for(i=1; i<=n; i++)
41     {
42         scanf("%d%d%d", x+i, y+i, c+i);
43     }
44     for(i=1; i<n; i++)
45     {
46         for(j=i+1; j<=n; j++)
47         {
48             if(abs(x[i]-x[j]) + abs(y[i]-y[j]) == 1)
49             {
50                 a[i].push_back(j);
51                 a[j].push_back(i);
52             }
53         }
54     }
55     mark[1] = 1;
56     printf("%d\n", dfs(1));
57     return 0;
58 }

 

posted @ 2013-03-27 22:47  Yuan1991  阅读(227)  评论(0编辑  收藏  举报