bzoj1782[Usaco2010 Feb]slowdown 慢慢游
来源:互联网 发布:装修公司淘宝店装修 编辑:程序博客网 时间:2024/05/19 13:28
1A真的爽。
网上那都什么鬼玩意,看着挺复杂,有必要吗。这不就是个裸链剖讲道理。
#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--)using namespace std;typedef long long ll;const int N=1e5+5;int n,m;struct node{ int sum; int l,r; //bool flag;}t[N*10];int tot,cnt;bool vis[N];int fa[N];int pos[N],dep[N],siz[N],son[N];int head[N<<1],go[N<<1],next[N<<1];int bl[N];inline void dfs(int x){ vis[x]=1; siz[x]=1; int i=head[x]; while (i) { int v=go[i]; if (!vis[v]) { dep[v]=dep[x]+1; fa[v]=x; dfs(v); siz[x]+=siz[v]; } i=next[i]; }}inline void dfs1(int x,int top){ pos[x]=++cnt; int k=0; bl[x]=top; int i=head[x]; while (i) { int v=go[i]; if (dep[v]>dep[x]&&siz[v]>siz[k]) k=v; i=next[i]; } if (!k)return; dfs1(k,top); i=head[x]; while (i) { int v=go[i]; if (dep[v]>dep[x]&&k!=v) dfs1(v,v); i=next[i]; }}inline void add(int x,int y){ go[++tot]=y; next[tot]=head[x]; head[x]=tot;}inline void build(int x,int l,int r){ t[x].l=l,t[x].r=r; if (l==r) { return; } int mid=(l+r)>>1; build(x<<1,l,mid); build(x<<1|1,mid+1,r);}inline void change(int x,int pos){ if (t[x].l==t[x].r) { t[x].sum+=1; return ; } int mid=(t[x].l+t[x].r)>>1; if (pos<=mid)change(x<<1,pos); else change(x<<1|1,pos); t[x].sum=t[x<<1].sum+t[x<<1|1].sum;}inline int query(int x,int l,int r){ //printf("%d %d %d\n",x,l,r); if (t[x].l==l&&t[x].r==r)return t[x].sum; int mid=(t[x].l+t[x].r)>>1; if (r<=mid)return query(x<<1,l,r); else if (l>mid)return query(x<<1|1,l,r); else return query(x<<1,l,mid)+query(x<<1|1,mid+1,r);}inline int solvesum(int x,int y){ int sum=0; while (bl[x]!=bl[y]) { if (dep[bl[x]]<dep[bl[y]])swap(x,y); sum+=query(1,pos[bl[x]],pos[x]); x=fa[bl[x]]; } if (pos[x]>pos[y])swap(x,y); sum+=query(1,pos[x],pos[y]); return sum;}inline void solve(){ build(1,1,n); //fo(i,1,n)change(1,pos[i]); //fo(i,1,n)printf("%d\n",pos[i]); fo(i,1,n) { int x; scanf("%d",&x); printf("%d\n",solvesum(1,x)); change(1,pos[x]); }}int main(){ scanf("%d",&n); fo(i,1,n-1) { int x,y; scanf("%d%d",&x,&y); add(x,y); add(y,x); } dep[1]=1; dfs(1); //memset(vis,0,sizeof(vis)); dfs1(1,1); solve(); return 0;}
0 0
- bzoj1782: [Usaco2010 Feb]slowdown 慢慢游
- [BZOJ1782] [Usaco2010 Feb]slowdown 慢慢游
- bzoj1782[Usaco2010 Feb]slowdown 慢慢游
- [bzoj1782][Usaco2010 Feb]slowdown 慢慢游 dfs序+线段树
- [BZOJ1782][Usaco2010 Feb]slowdown 慢慢游(dfs序+线段树)
- 【bzoj 1782】: [Usaco2010 Feb]slowdown 慢慢游
- 1782: [Usaco2010 Feb]slowdown 慢慢游
- bzoj 1782: [Usaco2010 Feb]slowdown 慢慢游
- BZOJ 1782 [Usaco2010 Feb]slowdown慢慢游 树状数组
- bzoj 1782: [Usaco2010 Feb]slowdown 慢慢游 (线段树+DFS序)
- BZOJ 1782 [Usaco2010 Feb]slowdown 慢慢游 dfs序,树状数组
- 【洛谷2982】[Usaco2010 Feb]慢下来Slowdown(dfs序+线段树)
- chocolate giving[usaco2010 Feb]
- bzoj2014 [Usaco2010 Feb]Chocolate Buying
- bzoj2015 [Usaco2010 Feb]Chocolate Giving
- [BZOJ2015][Usaco2010 Feb]Chocolate Giving
- [bzoj2015&&Usaco2010 Feb] Chocolate Giving
- 2015: [Usaco2010 Feb]Chocolate Giving
- 文章标题
- 星系炸弹
- MTK lcm 驱动加载流程 android M
- Linux学习总结(27)——CentOS7及以上系统的systemctl命令使用介绍
- C++ 虚函数表解析
- bzoj1782[Usaco2010 Feb]slowdown 慢慢游
- Android手势识别GestureDetector详解
- tensorflow07 《TensorFlow实战Google深度学习框架》笔记-04-05滑动平均模型
- Mac OS DYLD_LIBRARY_PATH 环境变量说明
- 冰点还原精灵图标不见了怎么办?
- Android实战——RxJava2解锁图片三级缓存框架
- leetcode 66. Plus One
- Word编辑公式时,公式后的序号靠下,不能再行中间显示
- Maven之自定义pom类型的基础项目