解題思路:用dfs求出整棵樹的dfs序列,這樣以u為根節點的子樹就轉化到相對應的區間上了。由於是區間不修改查詢問題,這個時候就可以用莫隊演算法了。
#pragma comment(linker, "/stack:16777216")
#include#include#include#include#includeusing namespace std;
const int maxn = 100005;
int n,m,k,cnt,head[maxn],w[maxn],val[maxn];
int block,tot,l[maxn],r[maxn];
int res[maxn];
struct edge
edge[maxn<<1];
struct query
}q[maxn<<1];
mapmap;
void addedge(int u,int v)
void dfs(int u,int fa)
r[u] = tot;
}void solve()
while(r > q[i].r)
while(l < q[i].l)
while(l > q[i].l)
res[q[i].id] = ans; }}
int main()
dfs(1,-1);
scanf("%d",&m);
for(int i = 1; i <= m; i++)
solve();
printf("case #%d:\n",cas++);
for(int i = 1; i <= m; i++)
printf("%d\n",res[i]);
} return 0;
}
HDU6333 莫隊演算法
給你n,m求 i 0mcn i 1 09 7 sum m 10 9 7 i 0m cni 10 9 7 t組資料t 1 05,1 m,n 105 t leq 10 5,1 leq m,n leq 10 5 t 105,1 m,n 10 5。這題常規思路暴力求字首和時間複雜度和空間複雜度都是顯然不夠的...
HDU6333 莫隊演算法
給你n,m求 t組資料 這題常規思路暴力求字首和時間複雜度和空間複雜度都是顯然不夠的,所以,採用莫隊演算法將t個詢問排序,之後將m看做l,n看做r,通過觀察可以發現 所以首先將r加 減到指定行,之後對l進行加 減,設res為答案,即 r加的時候 r減的時候 l加的時候 l減的時候 具體見 inclu...
HDU6333 莫隊演算法
給你n,m求 i 0mc ni 109 7 role presentation style position relative mi 0ci n 10 9 7 i 0 mcni 109 7 t組資料t 105,1 m,n 105 role presentation style position re...