題意是給你一棵樹 n個點 n-1條邊 起點是1 每乙個點都有權值 每次能從根節點走到葉子節點 經行k次遊戲 每次都是從1開始 拿過的點的權值不能拿第二次 問最大權值和。
說說我的做法吧 map【i】=a表示i節點的跟節點為a節點 從全部葉子節點開始入隊(有點佇列裡有三個變數 各自是節點編號 權值 深度 優先順序看** 裡面有點貪心的意思) 每次走根節點 假設根節點沒走過 則走它 並把該店權值變為0 否則直接跳到1這個節點(假設乙個個跳可能會超時)再入隊 當出隊的編號為1時而且拿的個數小於遊戲次數 則拿 否則結束 在跑深度的時候有個優化 開始沒有超時了 假設該節點深度已知了 則以後的根節點就不用跑了。!
詳細看**吧
#include#include#include#includeusing namespacestd;int
map[100010],mark[100010];int
deep[100010];__int64
num[100010];struct
node}
a;intmain
()
memset(mark,0,sizeof
(
mark));for(
i=1;i<n;i++) priority_queue<node>q;memset(deep,0,sizeof
(
deep));for(
i=1;i<=n;i++) x=map[x];d++;}
x=i;while
(
x!=1) a.deep=deep[i];a.value=num[i];a.ii=i;q.push(a);}}
//for(i=1;i<=n;i++)//printf("%d ^^^ %d\n",i,deep[i]);
__int64sum=0;
intcont=0;
while
(!q.empty())
*/if
(a.ii==1)
else
else
q.push(a);
}}printf("case #%d: %i64d\n",r++,sum);
}return0;
}
HDU 5242 GAME 2015上海邀請賽G題
題意 給定一顆以1號節點為根節點的有向樹,每個節點有乙個權值,問從1號節點出發k次,能到達的所有節點的和的最大值。思路 貪心的把樹的鏈按照權值和從大到小剖分成若干條鏈 過程可以根據上交書上的熟練剖分模版做細小改動 然後根據每條鏈的權值排序取最大的k個就是答案。include include incl...
2014上海邀請賽解題報告
難得能把整套題目做完,留個痕跡小小激動一下 這套題難度不大,雖然有些題目的題意描述得有點晦澀 先這裡簡單列舉一下吧,詳細的解題報告後面的鏈結。a.game with pearls 解題報告 貌似各種技巧能過,不過我想都沒想,粗暴地丟了個二分匹配上去。b.beam cannon 解題報告 線段樹 按照...
B Beam Cannon 2014上海邀請賽
題意 給 n 個點和乙個長 w 寬 h 的矩形,問平移這個矩形最多能覆蓋多少個點 思路 對於每乙個點,考慮什麼樣的矩形能覆蓋它,考慮矩形的中心點就可以,這樣乙個點對應乙個矩形,然後就是求 n 個矩形覆蓋次數最多的區域 用線段樹區間查最大就可以 include define mid l r 1 def...