洛谷月賽 U4727 小L 的二叉樹

2021-07-22 19:13:47 字數 1800 閱讀 3799

題目背景

勤奮又善於思考的小l接觸了資訊學競賽,開始的學習十分順利。但是,小l對資料結構的掌握實在十分渣渣。

所以,小l當時卡在了二叉樹。

題目描述

在電腦科學中,二叉樹是每個結點最多有兩個子結點的有序樹。通常子結點被稱作「左孩子」和「右孩子」。二叉樹被用作二叉搜尋樹和二叉堆。隨後他又和他人討論起了二叉搜尋樹。什麼是二叉搜尋樹呢?二叉搜尋樹首先是一棵二叉樹。設key[p]表示結點p上的數值。對於其中的每個結點p,若其存在左孩子lch,則key[p]>key[lch];若其存在右孩子rch,則key[p] < key[rch];注意,本題中的二叉搜尋樹應滿足對於所有結點,其左子樹中的key小於當前結點的key,其右子樹中的key大於當前結點的key。(因為小l十分喜歡裝xx,所以這裡他十分裝xx的給大家介紹了什麼是二叉樹和二叉搜尋樹)。

可是善於思考的小l不甘於只學習這些基礎的東西。他思考了這樣乙個問題:現在給定一棵二叉樹,可以任意修改結點的數值。修改乙個結點的數值算作一次修改,且這個結點不能再被修改。若要將其變成一棵二叉搜尋樹,且任意時刻結點的數值必須是整數(可以是負整數或0),所要的最少修改次數。

這一定難不倒聰明的你吧!如果你能幫小l解決這個問題,也許他會把最後的資產分給你1/16哦!

輸入輸出格式

輸入格式:

第一行乙個正整數n表示二叉樹節點數。

第二行n個正整數用空格分隔開,第i個數ai表示結點i的原始數值。

此後n - 1行每行兩個非負整數fa, ch,第i + 2行描述結點i + 1的父親編號fa,以及父子關係ch,(ch = 0 表示i + 1為左兒子,ch = 1表示i + 1為右兒子)。

為了讓你稍微減輕些負擔,小l規定:結點1一定是二叉樹的根哦!

輸出格式:

僅一行包含乙個整數,表示最少的修改次數

輸入輸出樣例

輸入樣例#1:

3 2 2 2

1 0

1 1輸出樣例#1: 2說明

20 % :n <= 10 , ai <= 100.

40 % :n <= 100 , ai <= 200

60 % :n <= 2000 .

100 % :n <= 10 ^ 5 , ai < 2 ^ 31.

【分析】

中序遍歷+lis…

沒錯就是這麼簡單qwqqq

可我的中序遍歷一直掛…直到現在。打表a了求。查錯

【**】

//u4727 小l的二叉樹

#include

#include

#include

#include

#define ll long long

#define fo(i,j,k) for(i=j;i<=k;i++)

using namespace std;

int n,top=0;

int a[100005],d[100005];

intlc[100005],rc[100005],f[100005];

bool vis[100005];

inline int

read()

while(ch>='0'&&ch<='9')

return

x*f;

}inline void dfs(int u)

int main()

dfs(1);

fo(i,1,top)

// if(((n-len)%10)==0 || ((n-len)%10)==8) n++;

printf("%d\n",n-len);

return

0;}

洛谷U4727小L的二叉樹 樹轉序列 LIS

勤奮又善於思考的小l接觸了資訊學競賽,開始的學習十分順利。但是,小l對資料結構的掌握實在十分渣渣。所以,小l當時卡在了二叉樹。這一定難不倒聰明的你吧!如果你能幫小l解決這個問題,也許他會把最後的資產分給你1 16哦!輸入格式 第一行乙個正整數n表示二叉樹節點數。第二行n個正整數用空格分隔開,第i個數...

小L的二叉樹

題目背景 勤奮又善於思考的小l接觸了資訊學競賽,開始的學習十分順利。但是,小l對資料結構的掌握實在十分渣渣。所以,小l當時卡在了二叉樹。題目描述 在電腦科學中,二叉樹是每個結點最多有兩個子結點的有序樹。通常子結點被稱作 左孩子 和 右孩子 二叉樹被用作二叉搜尋樹和二叉堆。隨後他又和他人討論起了二叉搜...

洛谷 改造二叉樹(LIS)

勤奮又善於思考的小l接觸了資訊學競賽,開始的學習十分順利。但是,小l對資料結構的掌握實在十分渣渣。所以,小l當時卡在了二叉樹。這一定難不倒聰明的你吧!如果你能幫小l解決這個問題,也許他會把最後的資產分給你1 16哦!輸入格式 第一行乙個正整數n表示二叉樹節點數。第二行n個正整數用空格分隔開,第i個數...