讨论 / 求大神指导(搜索法)
nw4869 2014-02-07 00:05:02
点我顶贴 收藏 删除
#include <iostream>

#include <cstring>

//#include <fstream>

using namespace std;

//ifstream fin("in.txt");

//#define cin fin

#define PARENT(i) i/2

#define LEFT(i) 2*i

#define RIGHT(i) 2*i+1

int tree[300];

int people[300];

int visit[300];

int find(int i, int deep)

{

if(i == 0 || visit[i])

return 0;

visit[i] = 1;

int count = people[i]*deep;

count += find(tree[PARENT(i)], deep+1);

count += find(tree[LEFT(i)], deep+1);

count += find(tree[RIGHT(i)], deep+1);

return count;

}

int main()

{

int N;

cin >> N;

tree[1] = 1;

for(int i = 1; i <= N; i++)

{

int n, l, r;

cin >> n >> l >> r;

people[i] = n;

tree[LEFT(i)] = l;

tree[RIGHT(i)] = r;

}

int min = 1000000000;

for(int i = 1; i <= N; i++)

{

memset(visit, 0, sizeof(visit));

int count = find(i, 0);

if(count < min)

min = count;

}

cout << min << endl;

return 0;

}

#1 nw4869@2014-02-07 00:06:17
回复 删除
wa60
查看更多回复
提交回复