poj1694

原创 2012年03月21日 15:05:55
#include<iostream>
#include<algorithm>
using namespace std;
int M,N,size,node[200][200],input,remain,num;
int post(int index){
	if(node[index][0]==0)
		return 1;
	int* need = new int[node[index][0]];
	for(int i=0;i<node[index][0];i++){
		need[i]=post(node[index][i+1]);
	}
	sort(need,need+node[index][0]);
	num=need[node[index][0]-1];
	remain=num-1;
	for(int i=node[index][0]-2;i>=0;i--){
		if(need[i]>remain){
			num++;			
		}else{
			remain--;
		}
	}
	delete need;
	return num;
}
int main(){
	cin>>M;
	while(M--){
		memset(node,0,sizeof(node));
		cin>>N;
		for(int i=0;i<N;i++){
			cin>>input;
			cin>>node[input][0];
			for(int j=1;j<=node[input][0];j++){
				cin>>node[input][j];
			}
		}
		cout<<post(1)<<endl;
	}
	
	return 0;
}

算子树总共需要多少石头,还可以倒序排序后取max(need[i]+i);

POJ1694 An Old Stone Game

/* POJ1694 An Old Stone Game 仍未透彻理解其算法思想啊啊啊啊 题意:有一棵古老的树,树有各种叉,目标是在树根上放一个石头。 有k个石头在桶里面,每次将一个石头放到树叶上,对...

POJ1694 An Old Stone Game (树,排序) .

An Old Stone Game 这道题看了好几遍,又看了看别人给的数据才看明白。意思就是现在有一棵树,有一些石头,依次把石头放在树叶上,如果一个节点的叶子节点全有一个石头了,就可以把它们的石头去掉...
  • guomei
  • guomei
  • 2011年07月24日 21:40
  • 593

ZOJ1427 POJ1694 An Old Stone Game

很简单的递归题。注意记录下节点子节点需要的石子数,然后从最大开始排列,取第一个为需要的石头数,遍历记录,如果余下的石头不足以支付,则需要补充。 /**********************...
  • neofung
  • neofung
  • 2012年03月21日 19:25
  • 571

POJ-1694(贪心)

题目:http://poj.org/problem?id=1694 容易想到,从树上取下来的石子可以在别的子树上使用,对以X为根的子树进行Mark,假设X有N个孩子,则N个孩子必须都挂上石子之后,X才...

POJ 1694 石头游戏

#include #include #include using namespace std; //#define DEBUG struct node { int count; int mi...

poj 1694 An old stone game

#include #include #include #include #include #include using namespace std; class node{ public: int ...

POJ 1694 An Old Stone Game

题目: 有一个古老的石头游戏,该游戏基于任意一棵树T,游戏的目标是在树T的根节点上放一颗石头,游戏的规则如下: 1 游戏开始前,玩家先将K个石头放入桶中。 2 在游戏的每一步,玩家从桶中拿一颗石...

1694: 是否能被3整除? (好题)

1694: 是否能被3整除? 时间限制: 1 Sec 内存限制: 128 MB 提交: 571 解决: 47 [提交][状态][讨论版] 题目描述 如果一个数的各个位数数字之和能够被3整除,则该数...
  • hnust_V
  • hnust_V
  • 2016年06月23日 19:28
  • 269

BZOJ 1694 && 2037 【DP……算是区间?

先送个大爷的题解传送门 显然在经过了l点和r点之后,[l,r]中途的点也是经过了的,并不会有任何贡献,于是可以用f[l][r]来记录这一段的贡献,还要记录当前是在左端点还是右端点,于是再开一...
  • Flaze_
  • Flaze_
  • 2016年11月13日 15:28
  • 159

1694 An Old Stone Game

#include #include #include #include using namespace std; #define MaxSize 201 int MinNum[MaxSi...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:poj1694
举报原因:
原因补充:

(最多只允许输入30个字)