`
林风丝雨
  • 浏览: 26795 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

北大 1694 An Old Stone Game

阅读更多

出处http://lishun618-163-com.iteye.com/blog/1489567

 

 

#include<iostream>
using namespace std;

typedef struct Node1{
        int index;
        Node1* next;
}Child;
typedef struct Node{
        int parent;
        int child_num;
        int live_child;
        Node1* child;
}Element;

int stone_num = 0;
int free_stone = 0;

int BFSGetNodeWithMaxChild(int root,Element T[],int n);
void placeStone(int index,Element T[],int n);

int main()
{
        int tree_num;
        cin >> tree_num;

        for(int i = 0; i < tree_num; i++)
        {
		stone_num = 0;
		free_stone = 0;
	
                int tree_nodes;
		cin >> tree_nodes;
		Element * T = new Element[tree_nodes+1];
		for(int j = 0; j <= tree_nodes; j++)
		{
			T[j].parent = 0;
			T[j].child_num = 0;
			T[j].child = NULL;	
		}
		
		for(int j = 0; j < tree_nodes; j++)
		{
			int node_k, child_num;
			cin >> node_k >> child_num;
			T[node_k].child_num = child_num;
			T[node_k].live_child = child_num;
			for(int k = 0; k < child_num; k++)
			{
				Child * new_child = new Child;
				cin >> new_child->index;
				T[new_child->index].parent = node_k;
				new_child->next = T[node_k].child;
				T[node_k].child = new_child;
			}
		}
		Child * guard = new Child;
		guard->index = 1;
		guard->next = NULL;
		T[0].child = guard;
		T[0].live_child = 1;
		T[0].child_num = 1;
		int key = BFSGetNodeWithMaxChild( 1, T,tree_nodes);
		placeStone(key,T,tree_nodes);
		cout << stone_num << endl;
		for(int k = 0; k <= tree_nodes; k++)
		{
			if(T[k].child == NULL) continue;
			Child* p = T[k].child;
			Child * next;
			do{
				next = p->next;
				delete p;
				p = next;
			}while(next != NULL);
		}
		delete[]T;
        }
}

int BFSGetNodeWithMaxChild(int root,Element T[],int n)
{
	int queue[n];
	int head = 0,tail = 0;
	int key = root; 
	queue[tail++] = root;
	int temp;
	while(tail != head)
	{
		temp = queue[head];
		head = (head + 1) % n;
		if(T[key].live_child <= T[temp].live_child)
			key = temp;
		Child * p = T[temp].child;
		while(p != NULL)
		{
			queue[tail] = p->index;
			tail = (tail + 1) % n;
			p = p->next;
		}
	}
	return key;
}

void placeStone(int index,Element T[],int n)
{
	if(index == 0)
		return;
	int parent = T[index].parent;
	Child * p = T[parent].child;
	if(p->index == index)
	{
		T[parent].child = p->next;
		delete p;
	}else{

		while(p->next != NULL)
		{
			if(p->next->index == index){
				p->next = p->next->next;
				break;	
			}
			p = p->next;
		}
	}
	T[parent].live_child--;
	
	if(free_stone < T[index].live_child)
	{
		int more = T[index].live_child - free_stone;
		stone_num += more;
		free_stone += more - 1;
	}
	if(T[parent].live_child == 0)
	{
		free_stone += T[parent].child_num - 1;
		placeStone(parent, T,n);
	}else{
		int new_root = BFSGetNodeWithMaxChild(parent,T, n);
		placeStone(new_root,T,n);
	}
	
}
0
0
分享到:
评论

相关推荐

    北京大学数字普惠金融指数.rar

    1、数据来源:北京大学数字金融中心 2、时间跨度:2011-2020年 3、区域范围:全国 4、指标说明: 其中县级数据从2014年开始,北大数字普惠金融研究院在2014年的时候只计算了1754个县的数据,所以拿到资料的小伙伴...

    最新北大中文核心期刊要目总览(2021年版)(北京大学图书馆).pdf

    北大图书馆中文核心期刊要目总览(2021年版)是北京大学图书馆定期发布的中文期刊评价成果,旨在为读者提供中文学术期刊的质量评价和选择指导。该总览将中文期刊按照学科门类进行分类,并列出各个学科的代表性期刊,...

    2019年北京大学寒假学堂测试(面向高中学生)数学试卷及答案(20211021012105).pdf

    "2019年北京大学寒假学堂测试数学试卷及答案" 本资源是北京大学寒假学堂测试的数学试卷及答案,面向高中学生,于2019年发布。该资源提供了数学试卷的完整内容,以及详细的答案解释,可以帮助高中学生更好地备战数学...

    PCB板缺陷检测数据集(北京大学693数据增强,6930)

    PCB板缺陷检测数据集(北京大学693数据增强,6930)

    北京大学数字普惠金融指数.pdf

    北京大学数字普惠金融指数

    北京大学-概率论与数理统计练习题(公共)答案大合集.pdf

    北京大学-概率论与数理统计练习题(公共)答案大合集.pdf

    NoteExpress2.7北京大学

    NoteExpress2.7北京大学是一款专为学术研究设计的文献管理软件,由北京大学推荐使用,它在科研人员和学生群体中广受欢迎。这款软件的核心功能在于帮助用户高效地收集、整理、引用和管理大量的学术文献资料,极大地...

    北京大学PPT

    北京大学的PPT,主要提供给大家一种制作PPT的模板,学习一下人家是怎么使用的PPT软件。

    经管数据北京大学数字普惠金融指数(省级、地级市和县域)2011-2022年

    中心和蚂蚁金服集团组成的联合课题组负责编制,课题组顾问由北京大学数字金融研究中心 主任黄益平,蚂蚁金服集团副总裁梁世栋担任。第一期指数(2011-2015)课题组 成员包括:郭峰、孔涛、王靖一、张勋、程志云、阮...

    北京大学ACM题库、北京大学ACM源码、浙江大学ACM源码

    【北京大学ACM题库、北京大学ACM源码、浙江大学ACM源码】 这些资源是针对ACM(International Collegiate Programming Contest,国际大学生程序设计竞赛)的训练材料,旨在帮助学生提升算法设计、编程技巧和问题解决...

    北京大学计算机初试复试汇总

    再者,"北大软微"和"北大信科"这两个文件名可能是关于北京大学软件与微电子学院(Soft and Microelectronics School, Peking University)和信息科学技术学院(School of Information Sciences and Technology, ...

    2011-2022年北大数字普惠金融指数数据(包括省市县).zip

    2、来源:北京大学数字普惠金融指数 3、范围:全国31省,337个地级市以及2800个县 4、指标:覆盖广度、使用深度、支付业务、保险业务、货币基金业务、投资业务、信用业务、信贷业务、数字化程度 这套指数包括数字...

    北京大学 地理信息系统概论专业课 真题

    【北京大学地理信息系统概论专业课真题解析】 地理信息系统(GIS)是一门融合了地理学、计算机科学、信息科学和遥感技术等多学科的交叉学科。本篇将围绕北京大学地理信息系统概论专业课的历年真题,深入解析相关...

    高等代数课本 北大版 高等代数课本北大版

    《高等代数》是北京大学出版的一本经典教材,它涵盖了线性代数、多项式理论、群论、环论等多个核心领域,对于深入理解和掌握代数学的基本概念、定理和方法具有极其重要的作用。这本书不仅是大学数学专业学生的必修...

    低面背景扁平化简约蓝北京大学论文答辩ppt模板.rar

    标题中的“低面背景扁平化简约蓝北京大学论文答辩ppt模板.rar”暗示了这是一个专为北京大学学生设计的论文答辩演示文稿模板,采用的是时下流行的低面设计风格,结合扁平化设计原则,并以蓝色调为主,呈现出简约、...

    MATLAB7.0北大教程

    对于初学者来说,掌握MATLAB的基本操作和编程技巧是十分重要的,而这本“MATLAB7.0北大教程”正为此提供了详尽的指导。 教程通常分为几个部分,首先会介绍MATLAB的工作环境,包括启动MATLAB、界面布局、工作空间的...

    北京大学《高等数学》大一上期末复习资料.pdf

    【北京大学《高等数学》大一上期末复习资料】 高等数学是大学理工科专业的重要基础课程,它涵盖了微积分、线性代数、多元函数微分学等核心内容。北京大学的高等数学课程以其严谨的学术风格和深入浅出的教学方式著称...

    北京大学-曹建-人工智能实践TensorFlow课件和代码)

    【标题】北京大学-曹建-人工智能实践TensorFlow课件和代码)揭示了人工智能领域的核心学习资源,特别是关于TensorFlow的深度应用。这个资料包由北京大学的曹建教授提供,旨在帮助学生和研究者掌握TensorFlow这一强大...

    北京大学数字普惠金融指数(PKU-DFIIC)2011_2020.xlsx 第三期

    如您在研究成果中使用了本数据,请注明所用数据为“北京大学数字普惠金融指数”;同时烦请按照以下文献引用方式引用我们的成果:郭峰、王靖一、王芳、孔涛、张勋、程志云,《测度中国数字普惠金融发展: 指数编制与...

    POJ1027-The Same Game

    【标题】"POJ1027 - The Same Game"是一个经典的编程竞赛题目,源自北京大学的在线编程平台POJ(Problem Online Judge)。该题目主要考察的是动态规划和矩阵链乘法的知识,要求参赛者编写程序解决一个具有策略性的...

Global site tag (gtag.js) - Google Analytics