UOJ UR 4追擊聖誕老人

2022-09-16 22:12:21 字數 2038 閱讀 2227

傳送門考慮直接維護乙個堆,然後往裡面丟鏈,並且取出k個堆頂就行了。

然後就需要分類討論啥的,給你的三個點變成兩條鏈,每次取出一條鏈之後選擇權值最小的再劈成兩條鏈丟進去。

卡空間  所以樹剖,不選擇倍增

複雜度o((n+k)logn)

#include#include

#include

#define mn 500000

#define n 524288

#define ll long long

using

namespace

std;

inline

intread()

while(ch>='

0'&&ch<='9')

return x*f;

}struct data

data

operator +(ll y)

};priority_queue

q;int n,k,w[mn+5],dep[mn+5],head[mn+5],cnt=0,top[mn+5],mx[mn+5

];int s[mn+5],p[mn+5],fa[mn+5],t[n*2+5],dfn[mn+5],dn=0

;struct edgee[mn+5

];inline

void ins(int f,int t);head[f]=cnt;}

vector

v[mn+5

];int merge(int x,int y)

int query(int l,int

r)

return

sum;

}inline

int up(int x,int

k)int lca(int x,int

y)pair

query(int x,int

y)

if(dfn[x]>dfn[y]) swap(x,y);

res=merge(res,query(dfn[x],dfn[y]));

return

make_pair(x,res);

}data insert(

int x,int

y,ll v)

+v;

}void solve(int x,int y,int z,int

l,ll add)

if(!(dep[x]>=dep[z]&&up(x,dep[x]-dep[z])==z)) swap(x,y);

if(x!=z) q.push(insert(x,up(x,dep[x]-dep[z]-1

),add));

q.push(insert(fa[z],y,add));

}void dfs(int x,int

tp)void pre(intx)}

intmain()

);

for(int i=2;i<=n;++i) ins(fa[i]=read(),i),dep[i]=dep[fa[i]]+1

; pre(

1);dfs(1,1

);

for(int i=1;i<=n;++i) t[i+n]=p[i];

for(int i=n;i;--i) t[i]=merge(t[i<<1],t[i<<1|1

]);

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

);continue

;}

if(x==y) swap(x,z);v[i].push_back(insert(x,y,0

));

if(z==y||z==x) continue

;

int l1=lca(x,z),l2=lca(y,z),l=lca(x,y);

if(dep[z]0

));

else

if(z!=l1&&z!=l2)

}for(int i=1;i<=k;++i)

return0;

}

1292 聖誕老人

這道題是一道動態規劃題 for int j 0 j 上面是該題的式子。例如 測試資料 315 199 155 301 215 170 150 25 當發射第二顆飛彈時i 2,我們另j 0。首先a j a i 即a 0 a 2 成立。於是我們看一下ans j 1 ans i ans 0 1 ans 2...

聖誕老人的禮物

問題描述 聖誕節來臨了,在城市a中聖誕老人準備分發糖果,現在有多箱不同的糖果,每箱糖果有自己的價值和重量,每箱糖果都可以拆分成任意散裝組合帶走。聖誕老人的馴鹿最多只能承受一定重量的糖果,請問聖誕老人最多能帶走多大價值的糖果。輸入 第一行由兩個部分組成,分別為糖果箱數正整數n 1 n 100 馴鹿能承...

貪心 聖誕老人的禮物

聖誕節來臨了,聖誕老人準備分發糖果,現在有多箱不同的糖果,每箱糖果有自己的價值和重量,每箱糖果都可以拆分成任意散裝組合帶走。聖誕老人的馴鹿雪橇最多只能裝下重量w的糖果。請問聖誕老人最多能帶走多大價值的糖果。第一行由兩個部分組成,分別為糖果箱數正整 n 1 n 100 馴鹿能承受的最大重量正整數 w ...