洛谷 改造二叉樹(LIS)

2021-08-28 13:04:33 字數 1165 閱讀 7530

勤奮又善於思考的小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就是答案。

# include using namespace std;

typedef long long ll;

const int maxn = 1e5+30;

int g[maxn][2], a[maxn], b[maxn], c[maxn], cnt;

void dfs(int u)

int main()

dfs(1);

int ans = 0;

cnt = 0;

for(int i=1; i<=n; ++i)

}printf("%d\n",n-ans);

return 0;

}

洛谷 P3365 改造二叉樹

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

改造二叉樹

description 小y在學樹論時看到了有關二叉樹的介紹 在電腦科學中,二叉樹是每個結點最多有兩個子結點的有序樹。通常子結點被稱作 左孩子 和 右孩子 二叉樹被用作二叉搜尋樹和二叉堆。隨後他又和他人討論起了二叉搜尋樹。什麼是二叉搜尋樹呢?二叉搜尋樹首先是一棵二叉樹。設key p 表示結點p上的數...

改造二叉樹

題目描述 小y在學樹論時看到了有關二叉樹的介紹 在電腦科學中,二叉樹是每個結點最多有兩個子結點的有序樹。通常子結點被稱作 左孩子 和 右孩子 二叉樹被用作二叉搜尋樹和二叉堆。隨後他又和他人討論起了二叉搜尋樹。什麼是二叉搜尋樹呢?二叉搜尋樹首先是一棵二叉樹。設key p 表示結點p上的數值。對於其中的...