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

2021-09-09 04:27:53 字數 1447 閱讀 9319

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

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

這一定難不倒聰明的你吧!如果你能幫小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 01 1

輸出樣例#1:

2

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

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

60 % :n <= 2000 .

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

沒想出來,參考幾年前一道模擬題

左中右,不就是中序遍歷嘛

求一下中序遍歷,再在這上面求lis,n-lis不就是答案嘛

但是有乙個問題,2,1,3,這樣的不能一次得到答案,因為必須嚴格單增

所以又用到了a[i]-i變為不嚴格單增

//

////

created by candy on 9/17/16.

////

#include

#include

#include

#include

using

namespace

std;

const

int n=1e5+5,inf=2147483647

;int

read()

while(c>='

0'&&c<='9')

return x*f;

}int

n,a[n],fa,ch;

struct

nodet[n];

int cnt=0

;void inorder(int

u)int g[n],d[n],ans=0

;void

lis()

}int main(int argc, const

char *ar**)

inorder(1);

//for(int i=1;i<=n;i++) printf("%d ",a[i]);

lis();

printf("%d

",n-ans);

return0;

}

洛谷月賽 U4727 小L 的二叉樹

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

小L的二叉樹

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

洛谷 新二叉樹(P1305,二叉樹)

輸入一串二叉樹,輸出其前序遍歷。輸入格式 第一行為二叉樹的節點數 n。1 n 26 後面 n 行,每乙個字母為節點,後兩個字母分別為其左右兒子。空節點用 表示 輸出格式 二叉樹的前序遍歷。輸入輸出樣例輸入6 abcbdi cj d i j 輸出abdicj include using namespa...