日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

3252: 攻略

發(fā)布時(shí)間:2025/3/19 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 3252: 攻略 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

3252: 攻略

Time Limit:?10 Sec??Memory Limit:?128 MB
Submit:?392??Solved:?157
[Submit][Status][Discuss]

Description

題目簡(jiǎn)述:樹(shù)版[k取方格數(shù)]//poj3422那是個(gè)最大費(fèi)用流 眾所周知,桂木桂馬是攻略之神,開(kāi)啟攻略之神模式后,他可以同時(shí)攻略k部游戲。 今天他得到了一款新游戲《XX半島》,這款游戲有n個(gè)場(chǎng)景(scene),某些場(chǎng)景可以通過(guò)不同的選擇支到達(dá)其他場(chǎng)景。所有場(chǎng)景和選擇支構(gòu)成樹(shù)狀結(jié)構(gòu):開(kāi)始游戲時(shí)在根節(jié)點(diǎn)(共通線),葉子節(jié)點(diǎn)為結(jié)局。每個(gè)場(chǎng)景有一個(gè)價(jià)值,現(xiàn)在桂馬開(kāi)啟攻略之神模式,同時(shí)攻略k次該游戲,問(wèn)他觀賞到的場(chǎng)景的價(jià)值和最大是多少(同一場(chǎng)景觀看多次是不能重復(fù)得到價(jià)值的) “為什么你還沒(méi)玩就知道每個(gè)場(chǎng)景的價(jià)值呢?” “我已經(jīng)看到結(jié)局了。”

Input

第一行兩個(gè)正整數(shù)n,k 第二行n個(gè)正整數(shù),表示每個(gè)場(chǎng)景的價(jià)值 以下n-1行,每行2個(gè)整數(shù)a,b,表示a場(chǎng)景有個(gè)選擇支通向b場(chǎng)景(即a是b的父親) 保證場(chǎng)景1為根節(jié)點(diǎn)

Output

輸出一個(gè)整數(shù)表示答案

Sample Input

5 2
4 3 2 1 1
1 2
1 5
2 3
2 4

Sample Output

10

HINT

?

對(duì)于100%的數(shù)據(jù),n<=200000,1<=場(chǎng)景價(jià)值<=2^31-1

?

Source

dfs序+線段樹(shù)

【題解】://主要是為了練pb_ds

每次一定是選取一個(gè)點(diǎn),將它子樹(shù)內(nèi)權(quán)值和最大的鏈取走,以后就不會(huì)再選取鏈上的點(diǎn)

那么用堆維護(hù)這一過(guò)程,取最大值,刪去鏈的所有點(diǎn)

復(fù)雜度都為nlogn

#include<cstdio> #include<iostream> #include<ext/pb_ds/priority_queue.hpp> using namespace std; int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f; } typedef long long ll; typedef pair<ll,int> pa; typedef __gnu_pbds::priority_queue<pa > heap; const int N=2e5+7; struct node{int to,next; }e[N];int cnt,head[N]; heap q; heap::point_iterator id[N]; int n,K,v[N]; ll ans,mx[N]; void add(int x,int y){e[++cnt].to=y;e[cnt].next=head[x];head[x]=cnt; } void dp(int x){for(int i=head[x];i;i=e[i].next){dp(e[i].to);mx[x]=max(mx[x],mx[e[i].to]);}mx[x]+=v[x];id[x]=q.push(make_pair(mx[x],x)); } void del(int x){q.erase(id[x]);for(int i=head[x];i;i=e[i].next){if(mx[e[i].to]==mx[x]-v[x]){del(e[i].to);break; }} } int main(){n=read();K=read(); for(int i=1;i<=n;i++) v[i]=read();for(int i=1,x,y;i<n;i++) x=read(),y=read(),add(x,y);dp(1); for(int i=1;i<=K&&!q.empty();i++){pa t=q.top();ans+=t.first;del(t.second); }printf("%lld",ans);return 0; }

?

轉(zhuǎn)載于:https://www.cnblogs.com/shenben/p/6291206.html

總結(jié)

以上是生活随笔為你收集整理的3252: 攻略的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。