【深基】【蒟蒻求问】二叉树基础问题
  • 板块学术版
  • 楼主松毛虫
  • 当前回复4
  • 已保存回复4
  • 发布时间2021/9/25 19:30
  • 上次更新2023/11/4 05:39:38
查看原帖
【深基】【蒟蒻求问】二叉树基础问题
108881
松毛虫楼主2021/9/25 19:30
#include <cstdio>
#include <iostream>
using namespace std;
int value[260], winner[260];
int n;
void dfs(int x) {
	if(x >= 1 << n) return;
	else{
		dfs(2 * x);
		dfs(2 * x + 1);
		int lvalue = value[2 * x], rvalue = value[2 * x + 1];
		if(lvalue > rvalue) {
			value[x] = lvalue;
			winner[x] = winner[2 * x];
			}
			else {
				value[x] = rvalue;
				winner[x] = winner[2 * x + 1];
			}
		}
	}
int main(){
	cin >> n;
	for (int i = 0; i < 1 << n; i++){
		cin >> value[i + (1 << n)];
		winner[i + (1 << n)] = i + 1;
	}
	dfs(1);
	cout<< (value[2] > value[3]) ? winner[3] : winner[2];
	return 0;
}

RT,为我照着书上打下来的代码,题目是

P4715 【深基16.例1】淘汰赛

这里的输出部分写了

cin >> value[i + (1 << n)]

那么应该是从数组的2n2^{n}开始记录元素的,但是下面的是$dfs(1); 从1开始搜是要搜什么呢?

2021/9/25 19:30
加载中...