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

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

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

2019-11-11 07:54:04
字體:
來源:轉載
供稿:網友

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
综合网日日天干夜夜久久| 亚洲免费福利视频| 欧美最近摘花xxxx摘花| 成人国产精品久久久久久亚洲| 亚洲国产欧美一区二区三区同亚洲| 日本亚洲欧洲色| 97香蕉超级碰碰久久免费软件| 久久久久一本一区二区青青蜜月| www高清在线视频日韩欧美| 亚洲视频一区二区| 欧美中文字幕在线播放| 日韩精品亚洲精品| 亚洲电影在线看| 日韩欧美视频一区二区三区| 国产在线a不卡| 久久久久久香蕉网| 国产精品草莓在线免费观看| 中文欧美日本在线资源| 91九色精品视频| 国产精品中文字幕久久久| 久久久精品一区二区三区| 久久综合免费视频影院| 精品国产拍在线观看| 日韩av电影手机在线| 亚洲在线观看视频| 国产精品久久久久久久久借妻| 草民午夜欧美限制a级福利片| 热99精品里视频精品| 清纯唯美亚洲激情| 久久精品国产99国产精品澳门| 久久天天躁狠狠躁老女人| 日韩中文在线视频| 国产91色在线|| 亚洲精品一区二区三区婷婷月| 亚洲欧洲中文天堂| 中文亚洲视频在线| 国产噜噜噜噜噜久久久久久久久| 深夜福利亚洲导航| 色综合影院在线| 成人黄色免费片| 欧美日韩一区二区在线播放| 中文字幕精品在线| 日韩av在线最新| 国内精品久久久久久| 久久久噜噜噜久久| 色多多国产成人永久免费网站| 精品亚洲va在线va天堂资源站| 一区国产精品视频| 日韩中文在线不卡| 国产精品麻豆va在线播放| 亚洲人成电影网站色www| 亚洲一区第一页| 亚洲色图av在线| 国产精品一区专区欧美日韩| 久久琪琪电影院| 日韩在线中文视频| 亚洲人精品午夜在线观看| 91精品久久久久久久久久久| 欧美超级乱淫片喷水| 国产精品免费久久久| 国产精品成熟老女人| 久久高清视频免费| 日韩电影免费在线观看| 欧美色videos| 欧美一区二区.| 亚洲国产欧美精品| 欧美三级欧美成人高清www| 亚洲国产天堂久久综合网| 久久九九热免费视频| 久久激情视频久久| 亚洲精品乱码久久久久久金桔影视| 欧美成人自拍视频| 91久久精品视频| 久久99久久久久久久噜噜| 日韩av在线精品| 亚洲一区www| 欧美日韩国产在线| 日韩成人在线免费观看| 1769国产精品| 91国内产香蕉| 色偷偷av一区二区三区乱| 亚洲人成免费电影| 国产做受69高潮| 狠狠躁18三区二区一区| 亚洲视频axxx| 日韩精品视频中文在线观看| 在线观看国产精品淫| 亚洲国产精品久久久久秋霞不卡| 亚洲国产欧美自拍| 91国产在线精品| 激情成人在线视频| 国产亚洲福利一区| 亚洲欧美日韩国产精品| 亚洲第一精品电影| 久久影院免费观看| 国产成人综合一区二区三区| 久久久久久久国产精品视频| 97在线精品国自产拍中文| 成人国产精品一区| 成人综合国产精品| 欧美性一区二区三区| 欧美日韩一区免费| 欧美日韩在线一区| 欧美电影第一页| 欧美综合国产精品久久丁香| 亚洲日韩欧美视频一区| 亚洲国产精品99| 亚洲自拍偷拍视频| 国产成人精品a视频一区www| 国产精品白丝av嫩草影院| 亚洲国产精品999| 亚洲男人天堂九九视频| **欧美日韩vr在线| 欧美性受xxxx白人性爽| 热99精品里视频精品| 欧美国产亚洲视频| 欧美视频在线观看免费网址| 国产精品久久久久久久久久小说| 国产成人涩涩涩视频在线观看| 国产精品久久久久久av福利软件| 国产成人一区二区三区电影| 97成人超碰免| 国产精品影片在线观看| 日本在线精品视频| 亚洲自拍小视频免费观看| 亚洲精品白浆高清久久久久久| 日本欧美中文字幕| 成人免费网站在线看| 亚洲欧美三级在线| 欧美整片在线观看| 亚洲男子天堂网| 国内精品免费午夜毛片| 国产成人精品视频在线观看| 亚洲xxxx妇黄裸体| 久久综合久中文字幕青草| 国产精品自产拍在线观看中文| 精品视频久久久| 成人淫片在线看| 久久精品国产v日韩v亚洲| 国产亚洲人成网站在线观看| 精品无人区乱码1区2区3区在线| 欧美贵妇videos办公室| 2019中文字幕免费视频| 成人黄色中文字幕| 亚洲第一偷拍网| 性金发美女69hd大尺寸| 九九热这里只有精品免费看| 国产日韩av高清| 日韩电影免费观看中文字幕| 国产精品高潮呻吟久久av无限| 亚洲第一精品夜夜躁人人爽| 成人日韩av在线| 国产成人精品一区| 国产日本欧美一区二区三区在线| 亚洲性xxxx| 色中色综合影院手机版在线观看| 91免费福利视频| 亚洲自拍av在线| 欧美大片欧美激情性色a∨久久| 国产精品视频yy9099| 九色精品免费永久在线| 亚洲欧洲在线播放| 日韩欧美亚洲范冰冰与中字| 欧美精品久久一区二区|