wata 哥 的 vector<MAX> G 第一次不能用 POJ 3321 树状数组
2014-02-27 01:55
369 查看
关键是括号序列啊
还有,括号序列上一段代表一棵树,一个点还是代表一个点。
用指针表示图
还有,括号序列上一段代表一棵树,一个点还是代表一个点。
用指针表示图
#include <stdio.h> #include <iostream> #include <queue> #include <algorithm> #include <map> #include <vector> #include <cmath> #include <string.h> using namespace std; #define ll long long #define P pair<int,int> #define PDI pair<double,int> #define fst first #define sec second #define MS(x) memset(x,0,sizeof(x)) #define INF 0x3f3f3f3f #define MAX 400000 struct edge { int to; edge * next; }e[MAX]; int head; int sz[MAX]; edge* G[MAX]; void addEdge(int f,int t) { edge *te=&e[head++]; te->to=t; te->next=G[f]; G[f]=te; te=&e[head++]; te->to=f; te->next=G[t]; G[t]=te; } int n; int bit[MAX]; int L[MAX]; int R[MAX]; int cnt; void add(int i,int x) { while(i<=cnt) { bit[i]+=x; i+=(i&(-i)); } } int sum(int i) { int res=0; while(i>0) { res+=bit[i]; i-=(i&(-i)); } return res; } bool used[MAX]; void dfs(int x,int fa) { used[x]=1; L[x]=++cnt; edge* te=G[x]; while(te) { int v=te->to; if(v!=fa&&!used[v]) dfs(v,x); te=te->next; } R[x]=++cnt; } bool visit[MAX]; int main() { //freopen("acm.in","r",stdin); scanf("%d",&n); for(int i=0;i<n-1;i++) { int f,t; scanf("%d%d",&f,&t); addEdge(f,t); } dfs(1,0); for(int i=1;i<=n;i++) add(L[i],1); int m; scanf("%d",&m); for(int i=0;i<m;i++) { char c[3]; int node; scanf("%s%d",c,&node); if(c[0]=='Q') { printf("%d\n",sum(R[node])-sum(L[node]-1)); } if(c[0]=='C') { if(!visit[node]) { add(L[node],-1); visit[node]=1; } else { add(L[node],1); visit[node]=0; } } } return 0; }
相关文章推荐
- 不能将参数 1 从“int”转换为“std::_Vector_const_iterator<_Myvec>”(VS2010 )
- 实战c++中的vector系列--使用sort算法对vector进行排序(对vector<string>排序、使用稳定的排序std::stable_sort())
- vector<bool>中的代理机制与程序运行效率
- 避免使用vector<bool>
- 由jtable浅谈vector<vector<Object>>的用法
- 用迭代器求vector<double>中元素的和,for语句写循环
- vector<int>::size_type 解释
- poj1061 青蛙的约会 && poj 2115 C Looooops<扩展欧几里得>
- #碰到的小问题#c++中vector<int> 和vector<int>::iterator有什么不同
- C++ 使用::std::vector<>
- vector<IplImage*>类型时push_back问题
- Java利用反射来获取一个方法的 范型化参数 Vector<Integer>的类型
- typedef std::vector<Byte> ByteVector
- vector排序问题<unresolved overloaded function type>
- 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate
- 安卓版微信内置浏览器,<a href="tel:电话号码"></a> 这个链接失效,不能跳到拨号界面?
- C++ <vector>
- Winform中DataGridView绑定List<T>数据源时,点击DataGridView列头不能自动排序解决方法
- poj 3259 Wormholes <SPFA算法+求是否存在负环>
- poj 2931 Building a Space Station <克鲁斯卡尔>