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 }