tjut 3974
来源:互联网 发布:java工程师就业班 编辑:程序博客网 时间:2024/06/17 15:28
#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <vector>#include <queue>#include <set>#include <map>#include <string>#include <math.h>#include <stdlib.h>#include <time.h>using namespace std;const int MAXN = 50010;struct Edge{ int to,next;}edge[MAXN];int head[MAXN],tot;int cnt;int start[MAXN],end1[MAXN];void init(){ cnt = 0; tot = 0; memset(head,-1,sizeof(head));}void addedge(int u,int v){ edge[tot].to = v; edge[tot].next = head[u]; head[u] = tot++;}void dfs(int u){ ++cnt; start[u] = cnt; for(int i = head[u];i != -1;i = edge[i].next) { dfs(edge[i].to); } end1[u] = cnt;}struct Node{ int l,r; int val; int lazy;}segTree[MAXN*4];void Update_Same(int r,int v){ if(r) { segTree[r].val = v; segTree[r].lazy = 1; }}void push_down(int r){ if(segTree[r].lazy) { Update_Same(r<<1,segTree[r].val); Update_Same((r<<1)|1,segTree[r].val); segTree[r].lazy = 0; }}void Build(int i,int l,int r){ segTree[i].l = l; segTree[i].r = r; segTree[i].val = -1; segTree[i].lazy = 0; if(l == r)return; int mid = (l+r)/2; Build(i<<1,l,mid); Build((i<<1)|1,mid+1,r);}void update(int i,int l,int r,int v){ if(segTree[i].l == l && segTree[i].r == r) { Update_Same(i,v); return; } push_down(i); int mid = (segTree[i].l + segTree[i].r)/2; if(r <= mid)update(i<<1,l,r,v); else if(l > mid)update((i<<1)|1,l,r,v); else { update(i<<1,l,mid,v); update((i<<1)|1,mid+1,r,v); }}int query(int i,int u){ if(segTree[i].l == u && segTree[i].r == u) return segTree[i].val; push_down(i); int mid = (segTree[i].l + segTree[i].r)/2; if(u <= mid)return query(i<<1,u); else return query((i<<1)|1,u);}bool used[MAXN];int main(){ //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); int n; int T; scanf("%d",&T); int iCase = 0; while(T--) { iCase++; printf("Case #%d:\n",iCase); 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,start[u])); } else { scanf("%d%d",&u,&v); update(1,start[u],end1[u],v); } } } return 0;}
0 0
- tjut 3974
- tjut 5289
- tjut 5288
- tjut 5294
- tjut 2586
- tjut 5296
- tjut 5297
- tjut 5299
- tjut 5384
- tjut 5387
- tjut 5386
- tjut 5381
- tjut 5400
- tjut 5399
- tjut 5396
- tjut 5398
- tjut 5412
- tjut 5410
- [Python] SEU-jwc验证码识别器设计思路
- 2.2 Hello World
- Es6特性
- 五分钟深入 Hadoop 内核
- Android函数工具(读取InputStream到String字符串)
- tjut 3974
- 导出数据到excel报connection reset和broken pipe异常
- HDFS自定义小文件分析功能
- apk交互时保留页面框架
- 给solr配置中文分词器
- android studio 中svn不能清理代码的解决
- 4.redis的简单使用
- 排序方法汇总
- java 抽象工厂模式