題意:輸出給定的點序號區間中兩點間距離的最大值
思路:
考慮倍增思想,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個自己的本子 她想送最多的天數,使得每天至少送乙個本子,但是相鄰兩天送的本子個數不能相同 珂朵莉最多送幾天禮物呢 第一行乙個整...