jzoj 5782 城市獵人

2021-08-22 12:12:00 字數 1005 閱讀 2446

–本來是很難,但是總有優秀的大佬加神牛犇活在這個世界上

首先不用n^2列舉a和b,

某位大佬說:

a和b其實就是

1 * (m-i+1),2 * (m-i+1),3 * (m-i+1),4 * (m-i+1)。。。。

(哇,我咋不知道呢qaq)

那麼用並查集建一棵樹就好了

樹邊就是連線他們的 i

然後好像有什麼優化?——小樹連大樹(按秩合併)

最後跑對於每個詢問的x和y,跑lca,找到連線他們的所有邊的連通時間的最大值

就是答案啦啦啦

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int maxn=100005;

int n,m,q;

int f[maxn],s[maxn];

int l[maxn];

int d[maxn];

int find(int x)

int lca(int x,int y)

return f[x];

}int final(int x,int y,int d)

while(y!=d)

return ans;

}int main()

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

else}}

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

return

0;}

CF578B Or Game(貪心)題解

現在有n個數 a 1,a 2,a 3,a n 你最多可以進行k次操作,每次操作你可以將其中乙個數乘以 x 使得 a 1 a 2 a n 最大。貪心 字首字尾 首先明確 答案的這 k 次 times x 操作用都會在同乙個數身上。因為 x 大於 2 所以每次相乘都會使得該數的二進位制為至少左移一位,或...

578 查詢回答率最高的問題

即乙個問題show之後,可能是被answer了,也可能是被skip了,所以求回答率。其實思路都是一致的,求出回答次數 出現次數即可 題解一 select question id as survey log from select question id,sum case when action an...

JZOJ 交換 模擬

給出字串s和字串t,現在你要把s的某乙個字元和t的某乙個字元交換,使得交換之後的s至少要有三個連續相同的字元,交換之後的t也要有三個連續相同的字元。問有多少種不同的交換方式。第一行,乙個字串s。s只含有 r g b 三種字元,長度不超過50,不小於3。而且s任意兩個相鄰的字元都不相同。第二行,乙個字...