码迷,mamicode.com
首页 > 其他好文 > 详细

bzoj 3252 攻略

时间:2019-03-12 19:57:12      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:span   fine   +=   isp   long   for   思路   return   src   

题目大意:

树上每个点有一个正的点权,选k条不相交的链使权值和最大

思路:

被长链剖分的标签骗进来

法1:

这道题长链剖分标签的由来,类似重链剖分把树剖成若干条链,然后贪心的选k条即可

技术图片
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cstdlib>
 5 #include<cmath>
 6 #include<algorithm>
 7 #include<queue>
 8 #include<vector>
 9 #include<map>
10 #include<set>
11 #define ll long long
12 #define inf 2139062143
13 #define MAXN 200100
14 #define MOD 998244353
15 #define rep(i,s,t) for(register int i=(s),i##__end=(t);i<=i##__end;++i)
16 #define dwn(i,s,t) for(register int i=(s),i##__end=(t);i>=i##__end;--i)
17 #define ren for(register int i=fst[x];i;i=nxt[i])
18 #define pb(i,x) vec[i].push_back(x)
19 #define pls(a,b) (a+b)%MOD
20 #define mns(a,b) (a-b+MOD)%MOD
21 #define mul(a,b) (1LL*(a)*(b))%MOD
22 using namespace std;
23 inline int read()
24 {
25     int x=0,f=1;char ch=getchar();
26     while(!isdigit(ch)) {if(ch==-) f=-1;ch=getchar();}
27     while(isdigit(ch)) {x=x*10+ch-0;ch=getchar();}
28     return x*f;
29 }
30 int n,m,fst[MAXN],nxt[MAXN<<1],to[MAXN<<1],val[MAXN];
31 int mxs[MAXN],bl[MAXN],cnt;ll ans,mxd[MAXN];
32 priority_queue <ll> q;
33 void add(int u,int v) {nxt[++cnt]=fst[u],fst[u]=cnt,to[cnt]=v;}
34 void dfs(int x,int pa)
35 {
36     ren if(to[i]^pa)
37     {
38         dfs(to[i],x);
39         if(mxd[to[i]]>mxd[mxs[x]]) mxs[x]=to[i];
40     }
41     mxd[x]=mxd[mxs[x]]+val[x];
42 }
43 void dfs(int x,int pa,int anc)
44 {
45     bl[x]=anc;if(mxs[x]) dfs(mxs[x],x,anc);
46     ren if(to[i]^pa&&to[i]^mxs[x]) dfs(to[i],x,to[i]);
47 }
48 int main()
49 {
50     n=read(),m=read();int a,b;rep(i,1,n) val[i]=read();
51     rep(i,2,n) a=read(),b=read(),add(a,b),add(b,a);
52     dfs(1,0);dfs(1,0,1);rep(i,1,n) if(bl[i]==i) q.push(mxd[i]);a=1;
53     while(a<=m&&!q.empty()) {ans+=q.top();q.pop();a++;}
54     printf("%lld\n",ans);
55 }
View Code

法2:

 

bzoj 3252 攻略

标签:span   fine   +=   isp   long   for   思路   return   src   

原文地址:https://www.cnblogs.com/yyc-jack-0920/p/10519159.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!