/*给出一棵树的描述
第一行输入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的更多相关文章

  1. 【poj1694】 An Old Stone Game

    http://poj.org/problem?id=1694 (题目链接) 题意 一棵树,现在往上面放石子.对于一个节点x,只有当它的直接儿子都放满石子时,才能将它直接儿子中的一个石子放置x上,并回收 ...

  2. hdu&&poj搜索题题号

    搜索 hdu1067 哈希 hdu1401 双向搜索 hdu1430 哈希 hdu1667 跌搜+启发式函数 hdu1685 启发式搜索 hdu1813 启发式搜索 hdu1885 状态压缩搜索 hd ...

  3. ACM学习大纲

    1 推荐题库 •http://ace.delos.com/usaco/ 美国的OI 题库,如果是刚入门的新手,可以尝试先把它刷通,能够学到几乎全部的基础算法极其优化,全部的题解及标程还有题目翻译可以b ...

  4. ACM训练大纲

    1. 算法总结及推荐题目 1.1 C++ STL • STL容器: set, map, vector, priority_queue, queue, stack, deque, bitset• STL ...

  5. ACM学习大纲(转)

    1 推荐题库 •http://ace.delos.com/usaco/ 美国的OI 题库,如果是刚入门的新手,可以尝试先把它刷通,能够学到几乎全部的基础算法极其优化,全部的题解及标程还有题目翻译可以b ...

随机推荐

  1. Django 最佳实践

    不错的Django实践规范,转自Github: https://github.com/brantyoung/zh-django-best-practices/blob/master/readme.rs ...

  2. hdu 3835:R(N)(水题,数学题)

    R(N) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  3. webpack中引入的path[require('path')]是node.js内置的package,用来处理路径的。

    http://www.runoob.com/nodejs/nodejs-path-module.html

  4. Django model 改成中文标题

    class Tag(models.Model): title = models.CharField(max_length=30) def __str__(self): return self.titl ...

  5. JavaScript------如何解决表单登录信息输入为空显示提示

    <form name="fname" method="post" action="../Home/Login" onsubmit=&q ...

  6. windows查看进程线程的命令pslist

    pslist是用命令行查看线程:ProcessExplorer是图形化的查看线程,都在附件中. 1.查看进程 tasklist or  pslist -t Name                   ...

  7. C#中遍历ArrayList的三种方法

    using System; using System.Collections; using System.Linq; using System.Text; namespace ArrayListDem ...

  8. string 转 java对象、转map的方式

    1.使用fastJson 将String转 map: String out; Object succesResponse = JSON.parse(out);    //先转换成Object Map ...

  9. ASP.Net请求处理机制初步探索之旅 - Part 2 核心(转)

    开篇:上一篇我们了解了一个请求从客户端发出到服务端接收并转到ASP.Net处理入口的过程,这篇我们开始探索ASP.Net的核心处理部分,借助强大的反编译工具,我们会看到几个熟悉又陌生的名词(类):Ht ...

  10. 怎样sublime显示文件夹

    1.Project -> Add Folder to Project 2.选择你要添加的文件文件 效果图