WC模擬(1 8) T3 送你一朵聖誕樹

2021-08-14 13:25:31 字數 1584 閱讀 3670

送你一朵聖誕樹

題目背景:

1.8 wc

模擬t3

分析:並查集+ 堆

+ 貪心

對於全域性最小的那個點,選擇了它的父親之後,就一定會選擇它,所以我們直接合併它和它的父親,那麼對於乙個點集

i,記錄

ti為點集中的點的個數,

si為點集中的點的權值和,那麼,對於兩個點集,如果點集

i優於點集

j,那麼

ti * sj > tj * si

,那麼si /ti

< sj / tj

,那麼直接並查集

+ 堆,每次合併當前塊和父親的塊就可以了。

source:

/*

created by scarlyw

*/#include #include #include #include #include #include #include #include #include #include #include #include inline char read()

return *s++;

}///*

templateinline void r(t &x)

for (x = 0; isdigit(c); c = read())

x = ((x << 2) + x << 1) + (c ^ '0');

if (iosig) x = -x;

}//*/

const int out_len = 1024 * 1024;

char obuf[out_len], *oh = obuf;

inline void write_char(char c)

templateinline void w(t x)

}inline void flush()

/*templateinline void r(t &x)

//*/

const int maxn = 30000 + 10;

struct node

inline bool operator < (const node &a) const

} ;std::priority_queueq;

std::vectoredge[maxn];

int n, x, y, val;

int w[maxn], deg[maxn], father[maxn], sum[maxn], size[maxn], fa[maxn];

bool able[maxn];

inline void add_edge(int x, int y)

inline void read_in()

inline void dfs(int cur, int fa)

}inline int get_father(int x)

inline void solve()

while (!q.empty())

ans = std::max(ans, ret);

} }std::cout << ans;

}int main()

WC模擬(1 8) T2 送你乙個集合

送你乙個集合 題目背景 1.8 wc 模擬t2 分析 二進位制 第一次做通訊題。最樸素的想法,直接把 x傳回去,這樣顯然不夠優秀,考慮優化一下,顯然x,y至少存在一位 2進製位是不同的,那麼我們只要傳第乙個不同的位置,然後再傳 x在當前位是 0 1,這樣可以在 20以內解決,還是不夠優秀,考慮如何優...

WC模擬(1 12) T3 小C的線段樹

小c的線段樹 題目背景 1.12 wc 模擬t3 分析 dp 據說,這個玩意兒才是本場 t1 考場上只想到乙個 nm2的暴力,就是,直接定義 f i l r 表示當前是第 i個區間,上乙個括號是 l,r 這樣過掉了 k 1 的部分。考慮標算,注意到當 n m 時,是不存在合法操作序列的,所以因為 n...

NOIP模擬(20171024)T3 數學

求滿足方程ax xa mod2n 的解的個數 n 30,a 109詢問組數t 1000 引理一 若a,b 均為奇數,且a2 k 1 b2k 1 mod2n 則a b mod2n 證明 a 2k 1 b2k 1 mod2n a 2k 1 b2k 1 0 mod2n a b a2k a2k 1b a2k...