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

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

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

2019-11-14 09:32:21
字體:
來源:轉載
供稿:網友

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序。可以看hzwer神牛的解題報告,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
中文字幕九色91在线| 6080yy精品一区二区三区| 成人欧美一区二区三区黑人| 久久久久久久国产| 欧美在线性视频| 欧美日韩国产va另类| 九九热r在线视频精品| 亚洲综合一区二区不卡| 88xx成人精品| 久久九九有精品国产23| 国产精品av免费在线观看| 国产精品私拍pans大尺度在线| 国产日韩欧美一二三区| 亚洲а∨天堂久久精品喷水| 亚洲精品综合精品自拍| 亚洲一区999| 国产91在线播放九色快色| 国产精品扒开腿做爽爽爽男男| 欧美性猛交xxxx| 91亚洲国产精品| 亚洲人成电影网站色| 怡红院精品视频| 国产精品日本精品| 亚洲高清在线观看| 久久久久久久999精品视频| 中文字幕亚洲欧美在线| 日本欧美一二三区| 久久久久久午夜| 久久久久久综合网天天| 国产精品一二三在线| 成人欧美一区二区三区在线| 欧美午夜精品久久久久久久| 久久久999精品| 亚洲图中文字幕| 91精品免费视频| 国产日韩欧美另类| 成人免费网站在线观看| 久久久噜噜噜久噜久久| 欧美激情一区二区三级高清视频| 亚洲国产欧美自拍| 久久99精品久久久久久噜噜| 国产性色av一区二区| 成人午夜一级二级三级| 亚洲视频在线免费观看| 色与欲影视天天看综合网| 久久夜色精品国产亚洲aⅴ| 亚洲精选一区二区| 精品国产乱码久久久久久婷婷| 久久亚洲精品中文字幕冲田杏梨| 一区二区成人精品| 97国产精品视频人人做人人爱| 国产精品青草久久久久福利99| 6080yy精品一区二区三区| 91精品视频在线看| 日韩av手机在线观看| 日韩欧美在线播放| 欧美日韩aaaa| 最近更新的2019中文字幕| 91日本在线视频| 中文字幕一区日韩电影| 一本色道久久88综合亚洲精品ⅰ| 亚洲国产免费av| 国产精品视频免费在线观看| 国产欧美精品在线| 久久6免费高清热精品| 日韩欧美中文第一页| 91av在线视频观看| 亚洲裸体xxxx| 精品久久久久久电影| 欧美成人精品在线播放| 国产精品久久久999| 国产精品美女www| 2018国产精品视频| 欧洲美女7788成人免费视频| 国产欧美精品xxxx另类| 97av在线视频免费播放| 欧美成人精品激情在线观看| 日韩动漫免费观看电视剧高清| 亚洲国语精品自产拍在线观看| 久久成人精品电影| 亚洲精品一区在线观看香蕉| 国产精品盗摄久久久| 成人国产亚洲精品a区天堂华泰| 亚洲国产精品电影| 亚洲一区二区久久久久久| 中文字幕欧美日韩va免费视频| 国产亚洲欧美日韩一区二区| 国产91精品久久久久久| 永久免费看mv网站入口亚洲| 久久不射热爱视频精品| 日本19禁啪啪免费观看www| 国产精品视频免费在线| 日韩中文在线观看| 国产精品r级在线| 久久这里只有精品99| 日本久久久久久久久| 5278欧美一区二区三区| 亚洲欧美国产精品久久久久久久| 91超碰中文字幕久久精品| 欧美中文字幕视频在线观看| 97视频国产在线| 亚洲视频欧美视频| 日韩美女毛茸茸| 精品视频一区在线视频| 日韩视频在线观看免费| 中文字幕亚洲第一| 国产精品色悠悠| 国产精品国产三级国产aⅴ浪潮| 欧美性猛交xxxx富婆弯腰| 欧美最猛性xxxxx免费| 自拍偷拍亚洲精品| 一区二区三区视频免费在线观看| 九九久久久久99精品| 一本色道久久综合亚洲精品小说| 岛国精品视频在线播放| 国产精品久久国产精品99gif| 欧美性猛交xxxx免费看漫画| 欧美一级电影免费在线观看| 国产日韩在线亚洲字幕中文| 久久躁狠狠躁夜夜爽| 精品视频在线导航| 欧美综合在线第二页| 成人黄色短视频在线观看| 亚洲最大成人在线| 国产精品久久久久一区二区| 日韩一区二区av| 亚洲综合一区二区不卡| 国产小视频91| 国产精品久久久久99| 日韩精品中文字幕在线播放| 欧美性高跟鞋xxxxhd| 国产精品视频999| 国产精品久久久久免费a∨| 爽爽爽爽爽爽爽成人免费观看| 国产精品久久久久久亚洲影视| 成人免费视频xnxx.com| 黑人巨大精品欧美一区二区一视频| 成人精品久久一区二区三区| 欧美成人h版在线观看| 亚洲国产成人精品电影| 中文字幕不卡av| 疯狂欧美牲乱大交777| 亚洲人免费视频| 九色成人免费视频| 奇米成人av国产一区二区三区| 亚洲欧洲一区二区三区久久| 亚洲男女自偷自拍图片另类| 欧美高跟鞋交xxxxxhd| 日韩欧美亚洲范冰冰与中字| 成人h片在线播放免费网站| 欧美日韩美女在线观看| 亚洲乱码国产乱码精品精| 欧美视频一区二区三区…| 青草青草久热精品视频在线网站| 91日韩在线视频| 国产精品激情av在线播放| 欧美国产精品日韩| 日韩av综合网| 亚洲香蕉成视频在线观看| 亚洲精品网站在线播放gif| 精品久久久久久久久久久久| 国产精品视频99| 亚洲综合精品伊人久久| 亚洲伊人成综合成人网|