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

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

[BZOJ4372][爍爍的游戲][動態樹分治+線段樹+LCA]

2019-11-06 06:32:05
字體:
來源:轉載
供稿:網友

[BZOJ4372][爍爍的游戲][動態樹分治+線段樹+LCA]

題目大意:

給定一顆n個節點的樹,邊權均為1,初始每個點權值為0 。 其中操作Q x詢問x點的點權,操作 M x d wx點周圍距離不超過w的點權值加上w

思路:

應該是一棵蠻裸的動態樹分治,和BZOJ3730 : http://blog.csdn.net/g1n0st/article/details/56674271類似吧。

也是在每個節點上開一棵動態權值線段樹。只不過這道題是初始值為0,而且要求的是區間修改,單點詢問。

坑:

WTF求重心的時候存每個節點最大的兒子的數組沒有清空,到時求到的并不是重心。。。效率瞬間hhhh,還以為是常數問題優化了好久。

代碼:

#include <bits/stdc++.h>using namespace std;const int Maxn = 200005;inline int Max(const int &a, const int &b) { return a > b ? a : b;}inline int Min(const int &a, const int &b) { return a < b ? a : b;}inline void swap(int &a, int &b) { static int c; c = a; a = b; b = c;}int n, k;int head[Maxn], sub;struct Edge { int to, nxt; Edge(void) {} Edge(const int &to, const int &nxt) : to(to), nxt(nxt) {}} edge[Maxn << 1];inline void add(int a, int b) { edge[++sub] = Edge(b, head[a]), head[a] = sub;}int siz[Maxn], son[Maxn], root, S, rt[Maxn][2], p[Maxn];bool vis[Maxn];namespace IO { inline char get(void) { static char buf[1000000], *p1 = buf, *p2 = buf; if (p1 == p2) { p2 = (p1 = buf) + fread(buf, 1, 1000000, stdin); if (p1 == p2) return EOF; } return *p1++; } inline void read(int &x) { x = 0; static char c; bool f = 0; for (; !(c >= '0' && c <= '9'); c = get()) if (c == '-') f = 1; for (; c >= '0' && c <= '9'; x = x * 10 + c - '0', c = get()); if (f) x = -x; } inline void read(char &x) { x = get(); while (!(x >= 'A' && x <= 'Z')) x = get(); } inline void write(int x) { if (!x) return (void)puts("0"); if (x < 0) putchar('-'), x = -x; static short s[12], t; while (x) s[++t] = x % 10, x /= 10; while (t) putchar('0' + s[t--]); putchar('/n'); }};namespace Q {#define Maxw 20000500 int s[Maxw], ls[Maxw], rs[Maxw], sz; inline void insert(int &o, int l, int r, int L, int R, int v) { if (!o) o = ++sz; if (l >= L && r <= R) { s[o] += v; return; } int mid = (l + r) >> 1; if (mid >= L) insert(ls[o], l, mid, L, R, v); if (mid < R) insert(rs[o], mid + 1, r, L, R, v); } inline int query(int o, int l, int r, int v) { if (!o || l == r) return s[o]; int mid = (l + r) >> 1; if (mid >= v) return s[o] + query(ls[o], l, mid, v); else return s[o] + query(rs[o], mid + 1, r, v); }#undef Maxw};namespace LCA { int ff[Maxn][25], dep[Maxn]; inline void dfs1(int u, int fa) { ff[u][0] = fa; for (int i = 1; i <= 20; i++) { ff[u][i] = ff[ff[u][i - 1]][i - 1]; } for (int i = head[u], v; i; i = edge[i].nxt) { v = edge[i].to; if (v == fa) continue; dep[v] = dep[u] + 1; dfs1(v, u); } } inline int lca(int x, int y) { if (dep[x] < dep[y]) swap(x, y); int tmp = dep[x] - dep[y]; for (int k = 0, j = 1; j <= tmp; j <<= 1, k++) if (tmp & j) x = ff[x][k]; while (x != y) { int j = 0; while (ff[x][j] != ff[y][j]) j++; if (j) j--; x = ff[x][j], y = ff[y][j]; } return x; } inline int dist(int x, int y) { return dep[x] + dep[y] - (dep[lca(x, y)] << 1); }};inline void getroot(int u, int fa) { siz[u] = 1; son[u] = 0; for (int i = head[u], v; i; i = edge[i].nxt) { v = edge[i].to; if (v == fa || vis[v]) continue; getroot(v, u); siz[u] += siz[v]; son[u] = Max(son[u], siz[v]); } son[u] = Max(son[u], S - siz[u]); if (son[u] < son[root]) root = u;}inline void solve(int x) { vis[x] = 1; for (int i = head[x], v; i; i = edge[i].nxt) { v = edge[i].to; if (vis[v]) continue; S = siz[v]; root = 0; getroot(v, 0); p[root] = x; solve(root); }}inline void Modify(int x, int d, int w) { Q::insert(rt[x][0], 0, n, 0, d, w); int dist = 0; for (int i = x; p[i]; i = p[i]) { dist = LCA::dist(x, p[i]); if (dist > d) continue; Q::insert(rt[i][1], 0, n, 0, d - dist, w); Q::insert(rt[p[i]][0], 0, n, 0, d - dist, w); }}inline int Ask(int x) { int dist = 0, ret = 0; ret += Q::query(rt[x][0], 0, n, 0); for (int i = x; p[i]; i = p[i]) { dist = LCA::dist(x, p[i]); ret += Q::query(rt[p[i]][0], 0, n, dist); ret -= Q::query(rt[i][1], 0, n, dist); } return ret;}int main(void) { //freopen("4372.in", "r", stdin); //freopen("4372.out", "w", stdout); IO::read(n), IO::read(k); for (int i = 1; i < n; i++) { int a, b; IO::read(a), IO::read(b); add(a, b), add(b, a); } LCA::dfs1(1, 0); S = son[0] = n; getroot(1, 0); solve(root); char op; int x, d, w; while (k--) { if (IO::read(op), op == 'Q') { IO::read(x); IO::write(Ask(x)); } else { IO::read(x), IO::read(d), IO::read(w); Modify(x, d, w); } } return 0;}

完。

By g1n0st


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美国产高清va在线播| 欧美在线性视频| 欧美国产日韩一区二区在线观看| 欧美日韩成人在线播放| 国产成人免费av电影| 国产精品精品国产| 亚洲精品免费av| 国产91精品久久久久久久| 91色视频在线导航| 成人精品久久av网站| 久久久久久国产精品久久| www日韩欧美| 国产免费一区二区三区香蕉精| 4k岛国日韩精品**专区| 日韩女优人人人人射在线视频| 欧美激情精品久久久久久黑人| 最近2019中文字幕在线高清| 2019中文字幕免费视频| 国产综合久久久久久| 亚洲品质视频自拍网| 国产情人节一区| 456国产精品| 国产有码在线一区二区视频| 亚洲影视中文字幕| 97成人超碰免| 亚洲一区精品电影| 这里只有精品视频在线| 亚洲一区二区中文字幕| 亚洲精品中文字| 亚洲伊人成综合成人网| 精品女同一区二区三区在线播放| 在线观看亚洲视频| 亚洲裸体xxxx| 最近2019好看的中文字幕免费| 国产欧美日韩最新| 亚洲国产天堂久久综合网| 国模视频一区二区| 欧美日韩国产中文字幕| 在线观看国产欧美| 一本色道久久综合狠狠躁篇怎么玩| 欧美激情日韩图片| 日本国产精品视频| 欧洲精品久久久| 久久久国产一区二区| 色av中文字幕一区| 久久久久亚洲精品| www国产91| 91精品视频在线| 在线电影中文日韩| 亚洲精品美女视频| 日韩精品视频中文在线观看| 国产精品入口夜色视频大尺度| 亚洲美女免费精品视频在线观看| 红桃视频成人在线观看| 亚洲情综合五月天| 九九九热精品免费视频观看网站| 欧洲午夜精品久久久| 亚洲va国产va天堂va久久| 国产91热爆ts人妖在线| 国产亚洲免费的视频看| 中文字幕一区二区三区电影| 亚洲免费伊人电影在线观看av| 国产精品精品视频一区二区三区| 日韩精品视频在线观看免费| 欧美裸身视频免费观看| 欧美日韩国产一区二区三区| 韩国视频理论视频久久| 久久97精品久久久久久久不卡| 日韩网站在线观看| 亚洲一级片在线看| 亚洲人成网站色ww在线| 亚洲一区二区中文| 亚洲人成在线免费观看| 永久免费毛片在线播放不卡| 亚洲精品电影网在线观看| 国产成人在线亚洲欧美| 久久久电影免费观看完整版| 日韩在线中文字幕| 亚洲欧美日韩综合| 欧美性极品xxxx娇小| 中文字幕国产精品| 一区国产精品视频| 国产在线视频91| 98精品在线视频| 都市激情亚洲色图| 精品亚洲国产视频| 精品国产一区二区三区久久久| 日本国产欧美一区二区三区| 欧美一区二区三区免费观看| 久热在线中文字幕色999舞| 庆余年2免费日韩剧观看大牛| 91久久在线播放| 亚洲一区二区少妇| 亚洲欧美激情另类校园| 国产日韩av在线| 亚洲激情在线视频| 国产日韩欧美另类| 欧美亚洲在线观看| 亚洲视频免费一区| 在线观看亚洲视频| 88国产精品欧美一区二区三区| 日韩成人高清在线| 国产成人av网址| 日韩女在线观看| 国产视频丨精品|在线观看| 红桃av永久久久| 亚洲第一精品久久忘忧草社区| 中日韩美女免费视频网站在线观看| 91午夜在线播放| 亚洲久久久久久久久久| 北条麻妃一区二区三区中文字幕| 欧美激情视频网址| 亚洲欧美激情四射在线日| 亚洲久久久久久久久久| 欧美亚洲日本黄色| 国产成人av网| 精品国模在线视频| 国产精品扒开腿做| 国产精品美女www| 最近2019中文字幕第三页视频| 日韩欧美在线看| 欧美激情va永久在线播放| 日韩欧美精品免费在线| 日韩高清电影免费观看完整| 欧美日韩免费看| 久久99热精品这里久久精品| 精品偷拍一区二区三区在线看| 日本精品性网站在线观看| 国产日韩欧美影视| 国内成人精品视频| 中文字幕免费精品一区高清| 国产精品露脸自拍| 69精品小视频| 欧美日韩国产专区| 色综合久久中文字幕综合网小说| 精品国产成人在线| 欧美专区在线视频| 亚洲精品按摩视频| 欧美精品久久久久久久久久| 日韩av综合中文字幕| 国产精品久久久久久亚洲调教| 91久久嫩草影院一区二区| 亚洲一区精品电影| 韩日欧美一区二区| 91精品国产自产在线| 欧美日韩人人澡狠狠躁视频| 亚洲天堂影视av| 亚州精品天堂中文字幕| 国产精品大陆在线观看| 久久久精品国产| 奇米一区二区三区四区久久| 亚洲永久在线观看| 69av成年福利视频| 国产亚洲精品久久久久久777| 亚洲国产成人91精品| 日韩大陆欧美高清视频区| 黑人巨大精品欧美一区二区免费| 色综合91久久精品中文字幕| 国产日韩在线观看av| 久久久久久av| 国产亚洲精品久久久优势| 欧美视频一区二区三区…| 国产成人精品免费视频| 国产视频在线一区二区|