ummmmm ,新鲜出炉的WA的原版代码.......感觉人家做的AC,我靠做WA过活了.......
道路干咳,人生蛋疼/// 我需要看别人的代码去了.......这版本留着生孩子结婚纪念用.....虽然个人感觉这个思路....代码都没啥毛病,
不知道是格式还是咋回事就是不能被AC....
今天无意中打开发现原来不是答案错了,而是超时了,方法有问题......
# include<iostream>
using namespace std;
int bug[100];//N最多100个
int brian[100];
bool tunnel[101][101] = { false };
int sum = 0;
void DFS(int rootnum, int N, int M, int sum_) {//M 士兵
//从1开始到 N 房间数目 tunnel最大 N-1 到 N
if (M >= (bug[rootnum - 1]+19)/20)//M传值前*20 传入的房间1 但是对应bug和brian 为0
{
M -= ((bug[rootnum - 1]+19)/20);
sum_ = sum_ + brian[rootnum - 1];
}
int temp;
if (rootnum > N / 2)//基本满足完全二叉树定义,最后一个是N.N的父亲是N/2 ,后面的没孩子故而不用找
;//do nothing
else {
for (temp = rootnum + 1; temp < N; ++temp) {
if (tunnel[rootnum][temp]) {
DFS(temp, N, M, sum_);
}
}
}
if (sum_ > sum)
sum = sum_;
}
int main(void) {
//The cavern's structure is like a tree 暗示树结构
//there is one unique path leading to each room from the entrance 暗示树单向指针
//A starship trooper can fight against 20 bugs. 士兵比例 1:20
//The first line of each test case contains two integers N(0 < N <= 100) and M(0 <= M <= 100),
int i;//日常for循环
int path_x, path_y;//接受路径指向
int N, M;// N 代表房间数 M 代表士兵数
cin >> N >> M;
// The following N lines give the description of the rooms 暗示
//the amount of bugs inside and the possibility of containing a brain 虫子数 和大脑数
// 接下来的N-1 行代表了 路径
while (N != -1 || M != -1) {
if ((N < 0 && N>100) || (M < 0 && M>100))
return 0;
sum = 0;//重置数组
memset(tunnel, 0, sizeof(tunnel));//重置路径
for (i = 0; i < N; ++i) {
cin >> bug[i] >> brian[i];
}//录入虫子和大脑数据
for (i = 0; i < N - 1; i++) {
cin >> path_x >> path_y;
tunnel[path_x][path_y] = true;
}//录入路径
//开始遍历计算最大brian
DFS(1, N, M , 0);//传值顺序为: 从房间1 开始 N 个房间 M 个士兵能打败的总bug数 ,sum_初始0
cout << sum << endl;
cin >> N >> M;
}
system("pause");
return 0;
}