标签:max wing otto star integer rom next dia pos
http://acm.hdu.edu.cn/showproblem.php?pid=3974
代码:
#include <bits/stdc++.h> using namespace std; const int maxn = 1e5 + 10; int T, N; int head[maxn]; int cnt, tot; int st[maxn], en[maxn]; bool used[maxn]; struct Edge { int to, nx; }edge[maxn]; struct Node { int val; int l, r; int lazy; }node[maxn * 4]; void init() { cnt = 0; tot = 0; memset(head, -1, sizeof(head)); } void addedge(int u, int v) { edge[tot].to = v; edge[tot].nx = head[u]; head[u] = tot ++; } void dfs(int u) { cnt ++; st[u] = cnt; for(int i = head[u]; i != -1; i = edge[i].nx) dfs(edge[i].to); en[u] = cnt; } void Update_Same (int r, int v) { if(r) { node[r].val = v; node[r].lazy = 1; } } void push_down(int r) { if(node[r].lazy) { Update_Same(r * 2, node[r].val); Update_Same(r * 2 + 1, node[r].val); node[r].lazy = 0; } } void Build(int i, int l, int r) { node[i].l = l; node[i].r = r; node[i].val = -1; node[i].lazy = 0; if(l == r) return ; int mid = (l + r) / 2; Build(i * 2, l, mid); Build(i * 2 + 1, mid + 1, r); } void update(int i, int l, int r, int v) { if(node[i].l == l && node[i].r == r) { Update_Same(i, v); return; } push_down(i); int mid = (node[i].l + node[i].r) / 2; if(r <= mid) update(i * 2, l, r, v); else if(l > mid) update(i * 2 + 1, l, r, v); else { update(i * 2, l, mid, v); update(i * 2 + 1, mid + 1, r, v); } } int query(int i, int u) { if(node[i].l == u && node[i].r == u) return node[i].val; push_down(i); int mid = (node[i].l + node[i].r) / 2; if(u <= mid) return query(i * 2, u); else return query(i * 2 + 1, u); } int main() { scanf("%d", &T); for(int t = 1; t <= T; t ++) { printf("Case #%d:\n", t); int u, v; memset(used, false, sizeof(used)); init(); scanf("%d", &N); for(int i = 1; i < N; i ++) { scanf("%d%d", &u, &v); used[u] = true; addedge(v, u); } for(int i = 1; i <= N; i ++) { if(!used[i]) { dfs(i); break; } } Build(1, 1, cnt); char op[10]; int M; scanf("%d", &M); while(M --) { scanf("%s", op); if(op[0] == ‘C‘) { scanf("%d", &u); printf("%d\n", query(1, st[u])); } else { scanf("%d%d", &u, &v); update(1, st[u], en[u], v); } } } return 0; }
线段树 模板题 链表存图 区间修改单点查询 今天小目标之一把这个搞清楚可以自己写粗来
何生枷锁
标签:max wing otto star integer rom next dia pos
原文地址:https://www.cnblogs.com/zlrrrr/p/10682631.html