UOJ 418 集訓隊作業2018 三角形

2022-02-05 01:11:42 字數 2673 閱讀 4364

#418. 【集訓隊作業2018】三角形

和三角形沒有關係

只要知道兒子放置的順序,就可以直接模擬了

記錄歷史最大值

用乙個pair(a,b):之後加上a個,期間最大值為增加b個

合併?a1+a2=(a1+a2,max(b1,a1+b2))

放置順序考慮貪心

比較:a放在b前面(和父親進行合併)當且僅當(c=a+b).b

分a.a和b.a的正負進行討論

初始的pair:(w[x]-∑w[son[x]],w[x])把兒子會都扔掉

初始的pair放進堆裡,取n-1次,和父親合併,加入新的連通塊的pair

鍊錶維護操作序列

處理出操作順序,模擬或者線段樹合併

懶惰刪除堆自帶的bug

必須要使得決策堆和刪除堆的元素的相對順序是一樣的!

小於號過載充分!不能出現決策堆a,b,刪除堆b,a的情況!

小於號過載充分的話:

使得除非二者完全相等,否則必須有固定的大小順序(未定義的話會有很多相等,比較就是隨機的)

這樣才能使得兩個堆的相對位置相同。

#include#define reg register int

#define il inline

#define fi first

#define se second

#define mk(a,b) make_pair(a,b)

#define numb (ch^'0')

#define mid ((l+r)>>1)

using

namespace

std;

typedef

long

long

ll;template

il void rd(t &x)

template

il void output(t x)

template

il void ot(t x)

template

il void prt(t a,int st,int nd)

namespace

miracle

po(ll aa,ll bb,ll dd)

po friend

operator +(po a,po b)

bool friend operator

if(a.a-a.b!=b.a-b.b) return a.a-a.bb.b;

if(a.id!=b.id) return a.id>b.id;

return a.a>b.a;

}bool friend operator ==(po a,po b)

void

op()

}nc[n],ori[n];

priority_queue

q,d;

intff[n];

int fin(int

x)int

st[n],nd[n];

struct

lcp[n];

intpos[n];

struct

nodet[

40*n];

inttot;

intrt[n];

intvis[n];

void pushup(int

x)void upda(int &x,int l,int r,int

p,po c)

if(p<=mid) upda(t[x].ls,l,mid,p,c);

else upda(t[x].rs,mid+1

,r,p,c);

pushup(x);

}int merge(int x,int

y)int

pa[n],w[n];

ll ans[n];

intmain()

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

int o=n-1

;

while(o--)

if(vis[now.id])

vis[now.id]=1

;

int to=fin(pa[now.id]);

//cout<

if(to!=1

) p[nd[now.id]].nxt=st[to];

p[st[to]].pre=nd[now.id];

st[to]=st[now.id];

while(q.size()&&d.size())

}for(reg i=2;i<=n;++i)

}int x=st[1

];

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

//prt(pos,1,n);

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

//prt(rt,1,n);

x=st[1

];

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

x=p[x].nxt;

}prt(ans,

1,n);

return0;

}}signed main()

/*author: *miracle*

date: 2019/4/13 19:58:12

*/

view code

UOJ449 集訓隊作業2018 喂鴿子

uoj 看題後 感覺自己越來越菜了,再這樣下去,要是正式考試送溫暖豈不是連溫暖都拿不到了。一臉min max反演的樣子,由於每個鴿子都等價,列舉子集大小 i ii 即可 a ns i 1n n i 1 i 1nif i ans sum n binom n i 1 frac n i f i ans i...

UOJ 449 集訓隊作業2018 喂鴿子

449.集訓隊作業2018 喂鴿子 dp好題 處理前m個,最快吃飽的鴿子期望的時間 根據期望的定義 考慮每個方案數的概率 期望次數 列舉前m個用了x個,概率都是 1 m x em x 而em x 表示往前m個扔了x個期望的總共次數,就是x n m 考慮用了x個的方案數 生成函式egf思想。而出現乙個...

UOJ424 集訓隊作業2018 count

先特判掉 m n 的情況。考慮先確定乙個 f 陣列,然後判定他能否生成乙個好序列。考慮先確定最靠左邊的最大值的位置,此時他大於等於後面的元素,然後嚴格大於前面的元素。不難發現這種確定方式可以固定一組 f 序列,同時,如果這張圖上的最長鏈小於等於 m 那麼這個答案就是合法的。觀察到我們其實只關心長度,...