poj1694
/*给出一棵树的描述
第一行输入t,代表案例的个数
第二行一个n代表这棵树有n个节点
接下来n行第一个数是节点的编号,根节点编号为1,然后第二个数是节点的个数,如果为0那就没子节点,否则输入节点的
编号
方法:递归+排序
先求出根节点的r个子节点需要的最小石头数,然后按大到小排序r1,r2,r3..rr,另结果result初值为最大的那个
r1,然后剩下为remain=result-1,然后将remain从r2遍历到rr,如果都比remainxiao说明剩下的可以满足,否则结果
result+=ri-remain,remain=ri-1;,遍历r个数以后就可以得出结果
上面过程可以用递归实现
*/ #include <stdio.h>
#include <iostream>
#include <string.h>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
#define MAX 250
struct point
{
int num;//该节点的标号
vector<int> chind;//存储孩子的标号
int allchild;//存储孩子的个数
};
int cacl(int root,point *T)
{
int i;
vector<int> v;
if(T[root].allchild==) return ;
else
{
for(i=;i<T[root].allchild;i++)
v.push_back(cacl(T[root].chind[i]-,T) );//T[root].chind[i]-1比表示孩子的在这个容器中的编号
sort(v.begin(),v.end());
int result=v.back();
int remain=result-;//该节点要放一个
for(i=T[root].allchild-;i>=;i--)
{
if(remain>=v[i]) remain--;
else
{
result=result+v[i]-remain;
remain=v[i]-;
}
}
return result;
}
}
int main()
{
int i,j,n,k;
int t;
scanf("%d",&t); while(t--)
{
point *T=new point[MAX];//定义一个结构体指针,指向结构体数组
scanf("%d",&n);
k=;
while(n--)
{
scanf("%d",&T[k].num);
scanf("%d",&T[k].allchild);
for(i=;i<T[k].allchild;i++)
{
scanf("%d",&j);
T[k].chind.push_back(j);
}
k++;
}
int sum=cacl(,T);
printf("%d\n",sum);
delete T;
}
return ;
}
18:07:2418:07:2518:07:26
poj1694的更多相关文章
- 【poj1694】 An Old Stone Game
http://poj.org/problem?id=1694 (题目链接) 题意 一棵树,现在往上面放石子.对于一个节点x,只有当它的直接儿子都放满石子时,才能将它直接儿子中的一个石子放置x上,并回收 ...
- hdu&&poj搜索题题号
搜索 hdu1067 哈希 hdu1401 双向搜索 hdu1430 哈希 hdu1667 跌搜+启发式函数 hdu1685 启发式搜索 hdu1813 启发式搜索 hdu1885 状态压缩搜索 hd ...
- ACM学习大纲
1 推荐题库 •http://ace.delos.com/usaco/ 美国的OI 题库,如果是刚入门的新手,可以尝试先把它刷通,能够学到几乎全部的基础算法极其优化,全部的题解及标程还有题目翻译可以b ...
- ACM训练大纲
1. 算法总结及推荐题目 1.1 C++ STL • STL容器: set, map, vector, priority_queue, queue, stack, deque, bitset• STL ...
- ACM学习大纲(转)
1 推荐题库 •http://ace.delos.com/usaco/ 美国的OI 题库,如果是刚入门的新手,可以尝试先把它刷通,能够学到几乎全部的基础算法极其优化,全部的题解及标程还有题目翻译可以b ...
随机推荐
- php视频教程
网址:http://www.php100.com/index.html
- 【Python】求素数-稍加优化
print 'Find prime number smaller then input number \n' print 'Please input a number:' import datetim ...
- vue-infinite-scroll 自动加载
初次上手vue开发 笑话百出,各种麻爪 在实现上拉加载的时候用的是mint-ui里面的 infinite-scroll 结果在使用的时候不停的自动加载,后来查询了相关资料 原来是控件识别只要没有铺满全 ...
- iOS开发之--制作属于自己的frameWork
开发的时候,有时候,我们会遇到协同开发,在协同开发的时候,每个开发者都会创建自己的工具类,还有就是当一个项目需要嵌套到另一个项目里面,这些时候,如果能把所需的部分打包成framework,会方便很多, ...
- 解决finalflares 安装成功后无法显示问题
按照网上的安装方法:http://blog.sina.com.cn/s/blog_e9370eb80101gias.html 安装插件并破解,安装过程没有任何错误,但是打开max2012始终看不到这个 ...
- HDU 3695 / POJ 3987 Computer Virus on Planet Pandora
Computer Virus on Planet Pandora Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1353 ...
- java如何遍历当月所有的日期?
转自:https://zhidao.baidu.com/question/360215274.html import java.util.ArrayList;import java.util.Cale ...
- [hihoCoder] 题外话·堆
A direct applicatin of the heap data structure. Specifically, a max heap is used. The required funct ...
- .then()
reference: http://www.html-js.com/article/Study-JavaScript-jQuery-Deferred-and-promise-every-day 1.5 ...
- ralink雷灵RT5370 for mac ox 10.8 驱动
博主2013年一月份安装了黑苹果发现 1000BGN 这斯全球无解. 在多米网上买了个 ralink5370 芯片的网卡.结果好多时候,总是闪退纠结ing 最后找到在官网上找到一个驱动. 目测网速还可 ...