[HDOJ3974]Assign the task(建树胡搞)
2016-05-16 14:27
381 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3974
出现在窝bin的线段树专题里…第一时间想的是记录入度找出根节点,然后标记深度转换到线段树中。但是发现并不会这个姿势…于是直接深搜更新了…发现没有退化成链的数据。于是水水地过去了………………
出现在窝bin的线段树专题里…第一时间想的是记录入度找出根节点,然后标记深度转换到线段树中。但是发现并不会这个姿势…于是直接深搜更新了…发现没有退化成链的数据。于是水水地过去了………………
#include <algorithm> #include <iostream> #include <iomanip> #include <cstring> #include <climits> #include <complex> #include <fstream> #include <cassert> #include <cstdio> #include <bitset> #include <vector> #include <deque> #include <queue> #include <stack> #include <ctime> #include <set> #include <map> #include <cmath> using namespace std; #define fr first #define sc second #define pb(a) push_back(a) #define Rint(a) scanf("%d", &a) #define Rll(a) scanf("%I64d", &a) #define Rs(a) scanf("%s", a) #define FRead() freopen("in", "r", stdin) #define FWrite() freopen("out", "w", stdout) #define Rep(i, len) for(int i = 0; i < (len); i++) #define For(i, a, len) for(int i = (a); i < (len); i++) #define Cls(a) memset((a), 0, sizeof(a)) #define Clr(a, x) memset((a), (x), sizeof(a)) #define Full(a) memset((a), 0x7f7f, sizeof(a)) #define lrt rt << 1 #define rrt rt << 1 | 1 const int maxn = 50010; int n, m; int in[maxn]; int depth[maxn]; bool vis[maxn]; vector<int> G[maxn]; int q[maxn], front, tail; int task[maxn]; void bfs(int rt) { front = tail = 0; int lv = 0; depth[rt] = lv++; q[tail++] = rt; vis[rt] = 1; while(front < tail) { int u = q[front++]; Rep(i, G[u].size()) { if(!vis[G[u][i]]) { vis[G[u][i]] = 1; depth[G[u][i]] = lv; q[tail++] = G[u][i]; } } lv++; } } void update(int rt, int p) { task[rt] = p; Rep(i, G[rt].size()) { update(G[rt][i], p); } } int main() { // FRead(); int T, _ = 1; Rint(T); int u, v; char cmd[6]; while(T--) { Rint(n); Rep(i, n+2) G[i].clear(); Cls(depth); Cls(vis); Cls(in); Clr(task, -1); Rep(i, n-1) { Rint(u); Rint(v); G[v].push_back(u); in[u]++; } int rt = -1; For(i, 1, n+1) if(!in[i]) rt = i; bfs(rt); Rint(m); printf("Case #%d:\n", _++); while(m--) { Rs(cmd); if(cmd[0] == 'C') { Rint(u); printf("%d\n", task[u]); } if(cmd[0] == 'T') { Rint(u); Rint(v); update(u, v); } } } return 0; }
相关文章推荐
- AngularJS的学习--$on、$emit和$broadcast的使用
- eclipse 开发环境的设置
- 《UNIX环境高级编程》第二版:Apue.h文件引入
- 微信接口调用 b0a2
- RxJava 小试
- VS如何为基于对话框的MFC添加菜单及菜单项事件
- android SQLite数据库
- perf相关博客收藏
- java左右斜杠的相互转化
- 简单命名让你飞
- 约瑟夫问题
- Java finally语句到底是在return之前还是之后执行?
- dubbo系列-Linux下zookeeper的安装
- Mobileye采用单目摄像头做ADAS太不精确
- UML关系图
- php5.3 appache phpstudy win7win8win10下 运行速度慢
- Win10 UWP 开发学习代码(不断更新)
- unicode和utf-8之间的关系
- 记一次UDE-00008,ORA-06512错误,备份中断
- android切换buck构建项目