百度之星6049-沒有兄弟的舞會(貪心)
Problem Description
度度熊、光羽、帶勁三個人是好朋友。
度度熊有一棵n個點的有根樹,其中1號點為樹根。除根節點之外,每個點都有父節點,記i號點的父節點為fa[i]。
度度熊稱點i和點j是**兄弟**(其中i≠j)當且僅當fa[i]=fa[j]。
第i個點的權值為Ai。現要求選出一個點集,該點集合法當且僅當**點集中至多隻有一對兄弟**。
度度熊想知道,在所有可行的點集中,權值和**最大**以及**最小**的點集權值和分別是多少?
Input
第一行一個數,表示資料組數T。
每組資料第一行一個整數n;第二行n−1個數,表示fa[2],fa[3],..,fa[n];第三行n個數,表示Ai。
資料組數T=100,滿足:
- 1≤n≤105
- −109≤Ai≤109
- 1≤fa[i]<i
其中90%的資料滿足n≤1000。
Output
每組資料輸出一行,每行包含兩個數,分別表示權值和的**最大值**和**最小值**。
Sample Input
2
5
1 1 2 2
-4 -4 -1 -2 -5
5
1 1 3 2
-1 -4 2 0 -2
Sample Output
0 -15 2 -7
思路:這道題最容易想到的就是貪心,最大值時只取大於0的權值,最小值只去小於0的權值。等我學會了樹形DP再回來優化..
#include<iostream> #include<algorithm> #include<string.h> using namespace std; typedef long long ll; const int N = 1e5; struct node { int w, fa; }; node a[N]; //對結構體排序 bool cmp1(node x, node y) { if (x.w > y.w) return true; else return false; } bool cmp2(node x, node y) { if (x.w < y.w) return true; else return false; } void solve() { int n; cin >> n; int mp[N] = { 0 }; a[1].fa = N - 1; for (int i = 2; i <= n; i++) { cin >> a[i].fa; } for (int i = 1; i <= n; i++) { cin >> a[i].w; } sort(a + 1, a + n + 1, cmp1); ll sum1 = 0, sum2 = 0; int flag1 = 0, flag2 = 0; for (int i = 1; i <= n; i++) { int fa = a[i].fa, w = a[i].w; if (mp[fa] == 1 && flag1 == 0 && w>0)//flag用來標誌至多隻有一對兄弟的要求 { flag1 = 1; sum1 += w; } else if (mp[fa] == 0 && w>0) { mp[fa]++; sum1 += w; } else if (w <= 0) { break; } } memset(mp, 0, sizeof(mp)); sort(a + 1, a + n + 1,cmp2); for (int i = 1; i <= n; i++) { int fa = a[i].fa, w = a[i].w; if (mp[fa] == 1 && flag2 == 0 && w<0)//至多一個兄弟結點 { flag2 = 1; sum2 += w; } else if (mp[fa] == 0 && w<0) { mp[fa]++; sum2 += w; } else if (w >= 0) { break; } } cout << sum1 << " " << sum2 << endl; } int main() { int T; cin >> T; while (T--) { solve(); } return 0; }
,
相關推薦
百度之星6049-沒有兄弟的舞會(貪心)
Problem Description 度度熊、光羽、帶勁三個人是好朋友。 度度熊有一棵n個點的有根樹,其中1號點為樹根。除根節點之外,每個點都有父節點,記i號點的父節點為fa[i]。 度度熊稱點i和點j是**兄弟**(其中i≠j)當且僅當fa[i]=fa[j]。 第i個點
2018 “百度之星”程序設計大賽 - 初賽(A)1004 / hdu6377 度度熊看球賽 dp遞推
的確 就會 世界杯 .cn 世界 problem 產生 amp 表示 度度熊看球賽 Problem Description 世界杯正如火如荼地開展!度度熊來到了一家酒吧。 有 N 對情侶相約一起看世界杯,熒幕前正好有 2×N 個橫排的位置。 所有人都會隨機坐在某個位置上。
2018 “百度之星”程序設計大賽 - 初賽(B)
namespace main color gre lose clu its lse bits rank 264, 三題水過 ~ hdu6380_degree #include <bits/stdc++.h> using namespace std; typ
2018百度之星資格賽 1001調查問卷(狀壓dp)
百度之星 一行 problem nts 數據 output 兩張 href bestcode 調查問卷 Accepts: 1289 Submissions: 5642 Time Limit: 6500/6000 MS (Java/Others
沒有兄弟的舞會(百度之星2018-複賽)(貪心)
Problem Description 度度熊、光羽、帶勁三個人是好朋友。 度度熊有一棵n個點的有根樹,其中1號點為樹根。除根節點之外,每個點都有父節點,記i號點的父節點為fa[i]。 度度熊稱點i和點j是**兄弟**(其中i≠j)當且僅當fa[i]=fa[j]。
HDU6409 沒有兄弟的舞會(2018百度之星複賽,貪心)
Problem Description 度度熊、光羽、帶勁三個人是好朋友。 度度熊有一棵n個點的有根樹,其中1號點為樹根。除根節點之外,每個點都有父節點,記i號點的父節點為fa[i]。
hdu 5253 連接的管道(kruskal)(2015年百度之星程序設計大賽 - 初賽(2))
ostream turn targe 告訴 margin 表輸入 輸入 cst 代碼 連接的管道 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T
2014年百度之星程序設計大賽 - 資格賽 1002 Disk Schedule(雙調歐幾裏得旅行商問題)
problem code 數據讀取 包括 想是 tracking sample cout http Problem Description 有非常多從磁盤讀取數據的需求。包含順序讀取、隨機讀取。為了提高效率,須要人為安排磁盤讀取。然而,在現實中。這樣的做法非常復雜。
ACM-百度之星資格賽之Energy Conversion——hdu4823
ios break get enter span bmi ria hint -c Energy Conversion Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav
2014百度之星資格賽題解
.cn -i lan while pro acm 起點 pos con 比賽鏈接:點擊打開鏈接 ,,杭電把比賽關了代碼都找不到了。。 無責任民科還是mark一下好了。。 HDU 4823 Energy Conversion 把式子變換一下發現是一個等比數列,高速冪就可以
2014年百度之星程序設計大賽 - 資格賽 1001 Energy Conversion
大賽 pro 整數 code clu n) 足夠 gin bre Energy Conversion Problem Description 魔法師百小度也有遇到難題的時候—— 如今,百小度正在一個古老的石門面前,石門上有一段古老的魔法文字,讀懂這樣的魔法
2014百度之星資格賽第三題
字符串 struct uri hit other printf 能夠 ava 單獨 Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others
2014 百度之星 1003 題解 Xor Sum
dsm xor 難題 ane rac pro 數據包 20px weight Xor Sum Problem Description Zeus 和 Prometheus 做了一個遊戲,Prometheus 給 Zeus 一個集合,集合中包括了N個正整數,隨後 P
2014百度之星資格賽4題
歐幾裏得 font define ria min read span post eight 因為都是中文題。題意就不寫了。 A、Energy Conversion 這題先推斷一下能量能否添加,然後再依據添加這個公式去求出一個等比公式。就能夠直接求出須
2016"百度之星" - 初賽(Astar Round2A)--HDU 5690 |數學轉化+快速冪
分享 otto lld 方法 can a* sca uic left Sample Input 3 1 3 5 2 1 3 5 1 3 5 99 69 Sample Output Case #1: No Case #2: Yes Case #3: Yes
2017"百度之星"程序設計大賽 - 資格賽 度度熊的王國戰略
set ear sin 們的 ret ont 十分 turn std 度度熊的王國戰略 度度熊國王率領著喵哈哈族的勇士,準備進攻嘩啦啦族。 嘩啦啦族是一個強悍的民族,裏面有充滿智慧的謀士,擁有無窮力量的戰士。 所以這一場戰爭,將會十分艱難。 為了更好的進攻嘩啦啦族
百度之星1002 度度熊的王國戰略
超級 class mes 力量 can nbsp 是把 關系 cout Problem Description 度度熊國王率領著喵哈哈族的勇士,準備進攻嘩啦啦族。 嘩啦啦族是一個強悍的民族,裏面有充滿智慧的謀士,擁有無窮力量的戰士。 所以這一場戰爭,將會十分艱難。 為了
2017百度之星資格賽 1003:度度熊與邪惡大魔王(DP)
solution nav normal ner 就會 預處理 display badge rate 度度熊與邪惡大魔王 Accepts: 3021 Submissions: 18787 Time Limit: 2000/1000 MS (Java/Ot
2017百度之星資格賽 1003 度度熊與邪惡大魔王 背包DP
log accep 防禦 ssi str 完全背包 time 怪物 amp 度度熊與邪惡大魔王 Accepts: 3027 Submissions: 18837 Time Limit: 2000/1000 MS (Java/Others) Memor
度度熊的午飯時光 2017百度之星資格賽 -.-
set others spa 字典序 info iostream 最小 long long 預算 度度熊的午飯時光 Accepts: 755 Submissions: 8737 Time Limit: 2000/1000 MS (Java/Others)