題意:求以x為根的子樹中的最小權值
思路:dfs序,把樹轉化成乙個序列,類似lca中的轉化,記錄1棵子樹進去的時間戳和出去的時間戳。線段樹求區間最小值
#include#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;
#define lson(x) 2*x
#define rson(x) 2*x+1
typedef long long ll;
typedef pairpii;
const int maxn = 100005;
int in[maxn],out[maxn];
struct edge
edge[maxn];
int head[maxn],tot,t;
int a[maxn],num[maxn];
void init()
void add(int x,int y)
void dfs(int x)
out[x] = t;
}struct data
node[maxn*4];
void pushup(int cnt)
void build(int x,int y, int cnt)
int mid = (x+y) / 2;
build(x,mid,lson(cnt));
build(mid+1,y,rson(cnt));
pushup(cnt);
}void up(int x,int y,int cnt,int val)
int mid = (node[cnt].l + node[cnt].r) / 2;
if(y <= mid)
up(x,y,lson(cnt),val);
else if(x >= mid+1)
up(x,y,rson(cnt),val);
else
pushup(cnt);
}int fid(int x,int y,int cnt)
int mid = (node[cnt].l + node[cnt].r) / 2;
if(y <= mid)
return fid(x,y,lson(cnt));
else if(x >= mid+1)
return fid(x,y,rson(cnt));
else
return min( fid(x,mid,lson(cnt)) , fid(mid+1,y,rson(cnt)));
}int main(void)
dfs(1);
build(1,n,1);
int q;
scanf("%d",&q);
while(q--)
else
}} return 0;
}
hiho 1050 樹中的最長路
時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述上回說到,小ho得到了一棵二叉樹玩具,這個玩具是由小球和木棍連線起來的,而在拆拼它的過程中,小ho發現他不僅僅可以拼湊成一棵二叉樹!還可以拼湊成一棵多叉樹 好吧,其實就是更為平常的樹而已。但是不管怎麼說,小ho喜愛的玩具又...
hiho 1050 樹中的最長路
題目大意 給出一棵樹,其中每兩個節點都可以形成乙個路徑 要求路徑中的邊只能走一次 求出所有路徑中的長度最大值。分析 由於樹的任何乙個節點均可以作為根節點,因此dfs時候,選擇1即可。實現 pragma once pragma execution character set utf 8 本檔案為utf...
C 中BackgroundWorker的最簡單用法
c 使用不太多,但是總是要用上線程,比如後台跑個什麼函式,讓程式不要卡死之類的,以前總用thread,後來發現了backgroundworker這個好東西。剛入門接觸這玩意兒,用的不熟,這次先貼個最簡單的backgroundworker用法吧。backgroundworker worker new ...