亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

BZOJ 1103: [POI2007]大都市meg 樹鏈剖分, 樹狀數組+DFS序

2019-11-11 07:47:40
字體:
來源:轉載
供稿:網友

Description

  在經濟全球化浪潮的影響下,習慣于漫步在清晨的鄉間小路的郵遞員Blue Mary也開始騎著摩托車傳遞郵件了。 不過,她經?;貞浧鹨郧霸卩l間漫步的情景。昔日,鄉下有依次編號為1..n的n個小村莊,某些村莊之間有一些雙 向的土路。從每個村莊都恰好有一條路徑到達村莊1(即比特堡)。并且,對于每個村莊,它到比特堡的路徑恰好 只經過編號比它的編號小的村莊。另外,對于所有道路而言,它們都不在除村莊以外的其他地點相遇。在這個未開 化的地方,從來沒有過高架橋和地下鐵道。隨著時間的推移,越來越多的土路被改造成了公路。至今,Blue Mary 還清晰地記得最后一條土路被改造為公路的情景。現在,這里已經沒有土路了——所有的路都成為了公路,而昔日 的村莊已經變成了一個大都市。 Blue Mary想起了在改造期間她送信的經歷。她從比特堡出發,需要去某個村莊, 并且在兩次送信經歷的間隔期間,有某些土路被改造成了公路.現在Blue Mary需要你的幫助:計算出每次送信她需 要走過的土路數目。(對于公路,她可以騎摩托車;而對于土路,她就只好推車了。) Input

  第一行是一個數n(1 < = n < = 2 50000).以下n-1行,每行兩個整數a,b(1 < = a以下一行包含一個整數m (1 < = m < = 2 50000),表示Blue Mary曾經在改造期間送過m次信。以下n+m-1行,每行有兩種格式的若干信息 ,表示按時間先后發生過的n+m-1次事件:若這行為 A a b(a若這行為 W a, 則表示Blue Mary曾經從比特堡送信到 村莊a。 Output

  有m行,每行包含一個整數,表示對應的某次送信時經過的土路數目。 Sample Input 5

1 2

1 3

1 4

4 5

4

W 5

A 1 4

W 5

A 4 5

W 5

W 2

A 1 2

A 1 3

Sample Output 2

1

0

1

解題方法1: 直接無腦上樹鏈剖分。

#include <bits/stdc++.h>using namespace std;const int maxn = 250005;const int maxm = 500005;int head[maxn], cnt, sz, n, q;int dep[maxn], siz[maxn], fa[maxn], pos[maxn], bl[maxn];struct edge{int to, nxt; } E[maxm];struct seg{int l, r, sum; } T[maxn*10];void init(){ memset(head, -1, sizeof(head)); cnt = sz = 0;}void addedge(int u, int v){ E[cnt].to = v, E[cnt].nxt = head[u], head[u] = cnt++;}void dfs1(int x){ siz[x] = 1; for(int i = head[x]; ~i; i = E[i].nxt){ if(E[i].to == fa[x]) continue; dep[E[i].to] = dep[x] + 1; fa[E[i].to] = x; dfs1(E[i].to); siz[x] += siz[E[i].to]; }}void dfs2(int x, int chain){ int k = 0; sz++; pos[x] = sz; //分配x節點在線段樹中的編號 bl[x] = chain; //記錄鏈的頂端 for(int i = head[x]; ~i; i = E[i].nxt){ if(dep[E[i].to] > dep[x] && siz[E[i].to] > siz[k]){ k = E[i].to; //選擇子樹最大的兒子繼承重鏈 } } if(k == 0) return; dfs2(k, chain); for(int i = head[x]; ~i; i = E[i].nxt){ if(dep[E[i].to] > dep[x] && k != E[i].to){ dfs2(E[i].to, E[i].to); //其余兒子新開重鏈 } }}void build(int l, int r, int o){ T[o].l = l, T[o].r =r; if(l == r){ if(l == 1) T[o].sum = 0; else T[o].sum = 1; return ; } int mid = (l + r) / 2; build(l, mid, o*2); build(mid + 1, r, o*2+1); T[o].sum = T[o*2].sum + T[o*2+1].sum;}void update(int pos, int val, int o){ if(T[o].l == T[o].r){ T[o].sum = val; return; } int mid = (T[o].l + T[o].r) / 2; if(pos <= mid) update(pos, val, o*2); else update(pos, val, o*2+1); T[o].sum = T[o*2].sum + T[o*2+1].sum;}int query1(int L, int R, int o){ if(L <= T[o].l && T[o].r <= R) return T[o].sum; int mid = (T[o].l + T[o].r) / 2; int ans = 0; if(L <= mid) ans += query1(L, R, o * 2); if(mid < R) ans += query1(L, R, o * 2 + 1); return ans;}int query2(int x, int y){ int ans = 0; while(bl[x] != bl[y]){ if(dep[bl[x]] < dep[bl[y]]) swap(x, y); ans += query1(pos[bl[x]], pos[x], 1); x = fa[bl[x]]; } if(pos[x] > pos[y]) swap(x, y); ans += query1(pos[x], pos[y], 1); return ans;}int main(){ init(); scanf("%d", &n); for(int i = 1; i < n; i++){ int u, v; scanf("%d%d", &u, &v); if(u > v) swap(u, v); addedge(u, v); } dfs1(1); dfs2(1, 1); build(1, sz, 1); scanf("%d", &q); for(int i = 1; i <= n + q - 1; i++){ char cmd[5]; int x, y; scanf("%s", cmd); if(cmd[0] == 'W'){ scanf("%d", &x); 解題方法2: 看了hzwer的博客,發現了一種新方法,用樹狀數組維護DFS序??梢钥磆zwer神牛的解題報告,OTZ 然后這個DFS序貌似需要人工棧,丟一份蒟蒻代碼

#include <bits/stdc++.h>using namespace std;const int maxn = 250005;const int maxm = 500005;int n, m, head[maxn], st[maxm], en[maxm], tree[maxm], dfn, edgecnt;struct edge{int v, nxt; } E[maxm];void init(){ dfn = edgecnt = 0; memset(head, -1, sizeof(head));}void addedge(int u, int v){ E[edgecnt].v = v, E[edgecnt].nxt = head[u], head[u] = edgecnt++;}int lowbit(int x) {return x & (-x);}void add(int x, int v){for(; x <= m; x += x & -x) tree[x] += v;}int sum(int x){int res = 0; for(; x; x -= x & -x) res += tree[x]; return res;}void dfs(int u, int fa){ st[u] = ++dfn; add(dfn, 1); for(int i = head[u]; ~i; i = E[i].nxt){ int v = E[i].v; if(v == u) continue; dfs(v, u); } en[u] = ++dfn; add(dfn, -1);}int main(){ init(); scanf("%d", &n); m = n * 2; for(int i = 1; i < n; i++){ int u, v; scanf("%d%d", &u, &v); if(u > v) swap(u, v); addedge(u, v); } dfs(1, -1); char cmd[5]; int q; scanf("%d", &q); q += n - 1; while(q--){ scanf("%s", cmd); if(cmd[0] == 'W'){ int u; scanf("%d", &u); printf("%d/n", sum(st[u]) - 1); } else{ int u, v; scanf("%d%d", &u, &v); if(u > v) swap(u, v); add(st[v], -1); add(en[v], 1); } } return 0;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产精品久久久久秋霞蜜臀| 青青久久aⅴ北条麻妃| 精品一区电影国产| 亚洲va电影大全| 在线播放亚洲激情| 欧美在线观看一区二区三区| 日本一区二区在线播放| 国产狼人综合免费视频| 国产精品美腿一区在线看| 亚洲精品国精品久久99热一| 成人免费xxxxx在线观看| 日韩av中文字幕在线| 亚洲成人教育av| 欧美又大又硬又粗bbbbb| 欧美猛交ⅹxxx乱大交视频| 亚洲精品wwwww| 日韩中文理论片| 一区二区三区四区在线观看视频| 日韩中文字幕网址| 97av在线播放| 欧美日韩国产精品| 日韩精品中文字幕在线| 日韩视频免费在线观看| 日韩激情片免费| 欧美成人午夜影院| 久久成人综合视频| 国产精品日韩精品| 国产精品久久久久久久久借妻| 精品久久香蕉国产线看观看亚洲| 国产精品羞羞答答| 久久久久久久久久国产精品| 一区二区三区高清国产| 国产主播欧美精品| 久久在线免费观看视频| 国产一区二区激情| 久久精品99久久久久久久久| 欧美大片免费看| 尤物九九久久国产精品的特点| 亚洲精品成人久久电影| 亚洲一区亚洲二区| 国产精品自在线| 国产一区二区三区在线播放免费观看| 国产一区二区丝袜| 91中文字幕在线观看| 日韩欧美一区二区三区| 色综合亚洲精品激情狠狠| 91精品在线看| 国产精品99久久久久久人| 国产aⅴ夜夜欢一区二区三区| 久久黄色av网站| 91精品国产九九九久久久亚洲| 亚洲电影免费观看高清完整版在线观看| 欧美肥老太性生活视频| 91久久夜色精品国产网站| 国产成人97精品免费看片| 91在线观看欧美日韩| 亚洲国产精品久久| 777午夜精品福利在线观看| 国产精品你懂得| 福利视频第一区| 国产一区二区三区视频在线观看| 日韩大陆欧美高清视频区| 国产成人亚洲综合青青| 日韩一区av在线| 亚洲欧美日韩在线高清直播| 美乳少妇欧美精品| 亚洲3p在线观看| 91亚洲精华国产精华| 疯狂做受xxxx高潮欧美日本| 97视频在线观看视频免费视频| 日本一区二区不卡| 日韩在线免费av| 日韩的一区二区| 91精品久久久久久久久中文字幕| 日韩国产高清污视频在线观看| 成人国产精品一区| 久久久精品久久久| 91精品在线一区| 欧美一区二区三区……| 国产精品久久久久国产a级| 亚洲综合社区网| 成人免费在线视频网址| 国产午夜精品一区理论片飘花| 日本电影亚洲天堂| 神马久久久久久| 欧美极品欧美精品欧美视频| 久久成人人人人精品欧| 欧美激情极品视频| 欧美日韩国产成人在线观看| 国产男人精品视频| 欧美大人香蕉在线| 欧美性69xxxx肥| 久久精品视频在线播放| 欧美激情xxxxx| 欧美大秀在线观看| 亚洲人成电影网站色…| 成人xxxxx| 成人444kkkk在线观看| 欧美中文在线观看| 久久精品久久久久久国产 免费| 欧美大胆在线视频| 在线观看久久久久久| 日韩美女免费观看| 好吊成人免视频| 国产精品视频自拍| 中文日韩电影网站| 成人网中文字幕| 国产精品视频不卡| 国产精品色午夜在线观看| 97国产在线观看| 中文字幕不卡av| 久久6精品影院| 国产成人免费av电影| 国产一区二区三区精品久久久| 国产精品三级网站| 欧美怡春院一区二区三区| 欧美黑人巨大精品一区二区| 欧美人与性动交| 57pao国产精品一区| 亚洲第一视频在线观看| 亚洲男人天堂2019| 性欧美xxxx视频在线观看| 国产精品一区二区在线| 日韩欧美中文字幕在线观看| 91av在线免费观看| 精品国产视频在线| 久久久国产精品免费| 亚洲欧美在线免费观看| 欧美黑人巨大精品一区二区| 最新亚洲国产精品| 俺去啦;欧美日韩| 中文字幕亚洲二区| 欧美激情精品久久久久久蜜臀| 92看片淫黄大片欧美看国产片| 久久久91精品国产| 2019中文字幕在线观看| 国产一区二区三区高清在线观看| 神马国产精品影院av| 国产成人精品在线视频| 精品福利一区二区| 亚洲欧美一区二区三区四区| 久久这里只有精品视频首页| 国产成人精品视频在线| 亚洲精品国产suv| 久久久久久伊人| 日韩av在线天堂网| 亚洲精品欧美一区二区三区| 亚洲性69xxxbbb| 国产精品夜间视频香蕉| 国产视频精品一区二区三区| 日韩精品视频中文在线观看| 怡红院精品视频| 久久久久www| 国产69精品久久久久久| 欧美日韩国产一区在线| 国产精品亚洲综合天堂夜夜| 久久久久久久一区二区三区| 91精品国产高清自在线看超| 久久久欧美精品| 国产成+人+综合+亚洲欧美丁香花| 亚洲成人久久久久| 7m第一福利500精品视频| 欧美激情精品久久久久久黑人| 欧美性猛交xxxx免费看|