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

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

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

2019-11-14 08:57:18
字體:
來源:轉載
供稿:網友

Description

  在經濟全球化浪潮的影響下,習慣于漫步在清晨的鄉間小路的郵遞員Blue Mary也開始騎著摩托車傳遞郵件了。 不過,她經常回憶起以前在鄉間漫步的情景。昔日,鄉下有依次編號為1..n的n個小村莊,某些村莊之間有一些雙 向的土路。從每個村莊都恰好有一條路徑到達村莊1(即比特堡)。并且,對于每個村莊,它到比特堡的路徑恰好 只經過編號比它的編號小的村莊。另外,對于所有道路而言,它們都不在除村莊以外的其他地點相遇。在這個未開 化的地方,從來沒有過高架橋和地下鐵道。隨著時間的推移,越來越多的土路被改造成了公路。至今,Blue Mary 還清晰地記得最后一條土路被改造為公路的情景?,F在,這里已經沒有土路了——所有的路都成為了公路,而昔日 的村莊已經變成了一個大都市。 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
18性欧美xxxⅹ性满足| 欧美老女人性视频| 国产精品男人的天堂| 人人爽久久涩噜噜噜网站| 国产精品 欧美在线| 精品性高朝久久久久久久| 亚洲人成电影在线观看天堂色| 亚洲欧美日韩精品久久| 日韩精品免费视频| 欧美性猛交xxxx久久久| 久久国产精品久久久久久久久久| 亚洲国产精品99久久| 亚洲精品成a人在线观看| 久久精品成人欧美大片古装| 91久久精品日日躁夜夜躁国产| 国产精品久久久久免费a∨| 久久躁日日躁aaaaxxxx| 久久久久久亚洲| 久热精品视频在线观看一区| 一个人www欧美| 成人免费视频97| 成人国产精品久久久| 久久精品国产一区二区电影| www国产精品视频| 日韩av中文字幕在线播放| 91在线观看欧美日韩| 亚洲japanese制服美女| 亚洲国产成人久久综合| 中国日韩欧美久久久久久久久| 亚洲国产美女久久久久| 亚洲在线视频观看| 日本免费在线精品| 欧美国产亚洲精品久久久8v| 成人有码视频在线播放| 亚洲精品自拍视频| 一区二区三区回区在观看免费视频| 国产精品第10页| 国产精品日韩在线| 91国内精品久久| 91精品国产一区| 亚洲欧洲视频在线| 在线观看欧美日韩| 在线看福利67194| 日韩电影中文字幕| 亚洲第一综合天堂另类专| 日韩在线视频观看正片免费网站| 成人淫片在线看| 欧美成人精品一区二区三区| 久久久成人av| 国产精品日本精品| 亚洲人成网站在线播| 国产精品久久99久久| 欧美精品成人91久久久久久久| 最近更新的2019中文字幕| 中文字幕日韩欧美| 久久久精品免费视频| 最新日韩中文字幕| 久久久久久av| 亚洲va电影大全| 亚洲a一级视频| 日韩一区二区在线视频| www国产亚洲精品久久网站| 另类少妇人与禽zozz0性伦| 久久久噜噜噜久久久| 精品免费在线观看| 久久噜噜噜精品国产亚洲综合| 精品国内自产拍在线观看| 国产美女久久精品香蕉69| 欧美日韩国产专区| 97热在线精品视频在线观看| 亚洲国产第一页| 午夜美女久久久久爽久久| 亚洲成人av片在线观看| 高清欧美性猛交| 亚洲天天在线日亚洲洲精| 91精品国产91久久久久久最新| 亚洲成人久久电影| 国产亚洲精品久久| 亚洲xxxx视频| 亚洲jizzjizz日本少妇| 国色天香2019中文字幕在线观看| xxxxxxxxx欧美| 欧美性极品xxxx娇小| 在线观看国产成人av片| 国产性猛交xxxx免费看久久| 亚洲黄色成人网| 日韩日本欧美亚洲| 日韩精品视频在线免费观看| 亚洲自拍在线观看| 色狠狠久久aa北条麻妃| 欧美性猛xxx| 久久777国产线看观看精品| 亚洲欧美在线播放| 欧美激情一二三| 亚洲精品福利视频| 欧美超级免费视 在线| 欧美激情综合亚洲一二区| 日韩成人中文字幕| 久久精品国产亚洲| 欧美www视频在线观看| 7m第一福利500精品视频| 91在线直播亚洲| 久久综合网hezyo| 亚洲欧美国产精品久久久久久久| 亚洲午夜久久久久久久| 亚洲一区精品电影| 亚洲国产成人久久综合| 国模gogo一区二区大胆私拍| 91免费在线视频| 俺去了亚洲欧美日韩| 亚洲一区av在线播放| 亚洲欧洲日韩国产| 国产91在线高潮白浆在线观看| 国产精品白嫩初高中害羞小美女| 亚洲qvod图片区电影| 性欧美暴力猛交69hd| 最好看的2019年中文视频| 欧美多人爱爱视频网站| 国产精品视频免费在线观看| 欧美日韩国产一区中文午夜| 欧美激情xxxx| 久久精品国产v日韩v亚洲| 久久91精品国产| 在线观看国产精品日韩av| 国产精品777| 亚洲精品一区二区网址| 国产成人精品综合久久久| 国产婷婷色综合av蜜臀av| 欧美激情videoshd| 亚洲视频777| 亚洲精品一区久久久久久| 91视频88av| 在线日韩日本国产亚洲| 亚洲a成v人在线观看| 97免费中文视频在线观看| 热re91久久精品国99热蜜臀| 精品精品国产国产自在线| 亚洲精品欧美极品| 欧美性xxxx极品高清hd直播| 亚洲自拍偷拍在线| 草民午夜欧美限制a级福利片| 一区二区三区在线播放欧美| 68精品久久久久久欧美| 中文字幕亚洲综合| 久久精品久久精品亚洲人| 久久国内精品一国内精品| 国产视频久久久久久久| 国产精品久久久久久久午夜| 国产不卡精品视男人的天堂| 亚洲电影在线观看| 成人黄色免费片| 亚洲激情第一页| 粉嫩av一区二区三区免费野| 欧美肥臀大乳一区二区免费视频| 欧美国产日韩二区| 亚洲黄色www| 国产精品视频播放| 国产亚洲欧洲黄色| 欧美精品一区二区三区国产精品| 国产精品第七十二页| 亚洲女人被黑人巨大进入| 亚洲iv一区二区三区| 91av视频在线免费观看| 日韩精品一区二区三区第95|