牛客練習賽67 牛妹的蘋果樹

2021-10-09 05:25:39 字數 2402 閱讀 2824

題意:輸出給定的點序號區間中兩點間距離的最大值

思路:

考慮倍增思想,st[u][i] 代表從u號節點開始往後2^i個連續數中的直徑的兩個端點。

st[u][i] 一定是由 st[u][i-1] 和 st[u + 2^(i-1)][i-1]轉移過來的

思考怎麼轉移,顯然對應6種情況

1.若兩個塊中的直徑的端點倆倆之間不存在lca,那麼顯然直徑存在與兩個塊中的其中乙個(2種)

2.若兩個塊中的直徑的端點倆倆之間存在lca,那麼顯然對應四種情況,只需要選出其中最大的點對即可

//#define local

#include using namespace std;

#define ll long long

#define mem(a, b) memset(a,b,sizeof(a))

#define sz(a) (int)a.size()

#define inf 0x3f3f3f3f

#define dnf 0x7f7f7f7f

#define dbg printf("this is a input\n")

#define fi first

#define se second

#define pil pair #define pll pair #define pii pair #define mk(a, b) make_pair(a,b)

#define pb push_back

#define lf putchar('\n')

#define sp putchar(' ')

#define p_queue priority_queue

#define close ios::sync_with_stdio(0); cin.tie(0)

templatevoid read(t &x) while(isdigit(ch))x *= f;}

templatevoid read(t &first, args& ... args)

templatevoid write(t arg) if(x > 9) putchar(x % 10 + '0');}

templatevoid write(t arg, ts ... args) }

using namespace std;

const int n = 3e5 + 50;

int n , q;

int head[n], cnt;

struct node1 edge[n << 1];

void add (int f, int t, ll w)

int dep[n]; //記錄深度用於st表求lca

int f[n << 1][25]; //用於st表求lca

int euler[n << 1] , pos[n], lg[n << 1], tot; //用於st表求lca

ll d[n]; //記錄根到i的距離,用於求指定集合的直徑

void dfs1(int u , int fa, int deep)

}}//處理出尤拉序

void dfs2(int u , int fa)

}//預處理log陣列以及關於lca的st表

void init_lca()

}}//求lca

int lca(int x , int y)

ll dis(int u, int v)

pii st[n][25], t[10];

//計算兩段區間的合併後的最大直徑

pii merge(pii x, pii y)

; t[1] = ;

t[2] = ;

t[3] = ;

t[4] = ;

t[5] = ;

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

if(dis(t[i].fi , t[i].se) > dis(t[temp].fi , t[temp].se)) temp = i ;

return t[temp] ;

}//處理關於直徑的st表

void init_root()

void solve()

//查詢直徑st表

pii query(int l , int r)

int main()

solve();

while (q --)

}/*26 5

0 1 0 1 0 1

1 33 5

1 22 4

4 5 */

牛客練習賽61 F蘋果樹題解

學了澱粉質有一年多了,期間基本沒用過,又因為當時是直接背的 導致打比賽的時候對這道題根本無從下手,甚至都沒想到是澱粉質qwq 然後,今天去學了一下澱粉質,發現原理和實現特別簡單,快速碼了個模板後,又去順帶學了下點分樹,就來搞這道題了。這道題,我們看資料範圍,發現成熟度的大小非常的小,所以,我們考慮下...

牛客練習賽67 補題 題解

a.牛牛愛字串 題意 給定字串,輸出當中的數字,注意不能有前導零。簡單模擬題,但格式要求非常嚴格,最後乙個數字後不能有空格。還有乙個坑點,如果只有0也是要輸出乙個0的。我是用佇列模擬,去掉前導零。include using namespace std const int n 1e5 10 strin...

牛客練習賽9

時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld 珂朵莉想每天都給威廉送禮物,於是她準備了n個自己的本子 她想送最多的天數,使得每天至少送乙個本子,但是相鄰兩天送的本子個數不能相同 珂朵莉最多送幾天禮物呢 第一行乙個整...