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 ...
随机推荐
- Windows编程中回调函数的使用心得(MFC篇)
回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数.回调函数不是由该函数的实现方直接调用,而是在特定 ...
- Educational Codeforces Round 22 E. Army Creation 主席树 或 分块
http://codeforces.com/contest/813/problem/E 题目大意: 给出长度为n的数组和k, 大小是1e5级别. 要求在线询问区间[l, r]权值, 权值定义为对于 ...
- 简单的TableView
背景知识 每个表都是UITableView的实例,表中的每一行都是UITableViewCell的实例. TableView的种类 Grouped table Plain table without ...
- AngularJS bind
闲着无聊怕手生 小练习 <!DOCTYPE html><html><head><meta charset="utf-8"><s ...
- VC++ Debug产生异常时中断程序执行Break on Exception
It is possible to instruct the debugger to break when an exception occurs, before a handler is invok ...
- Java Cache
Ehcache http://www.ehcache.org/ Memcached http://memcached.org/ Server http://blog.couchbase.com/mem ...
- Java接口成员变量和方法默认修饰符
Java的interface中,成员变量的默认修饰符为:public static final 所以我们在interface中定义成员变量的时候,可以 1:public static final S ...
- 《Sqlserver》通过端口 8080 连接到主机 localhost 的 TCP/IP 连接失败。错误:“驱动程序收到意外的登录前响应。请验证连接属性,并检查 SQL Server 的实例正在主机上运行,且在此端口接受
1. 点击 开始 --> 所有程序 --> Microsoft SQL Server2005 --> 配置工具-->SQL Server configuration Manag ...
- Webservice工作原理及实例
Web Service工作原理及实例 一.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者In ...
- javajava持有对象(容器类)
数组是固定的长度去保存对象,还有一些集合类如基本的List.Set.Quene.Map可以存储不固定长度的对象.