bzoj 3772 :精神污染 线段树+打标记 or 主席树
3772: 精神污染
Time Limit: 10 Sec Memory Limit: 64 MB
Submit: 315 Solved: 87
[Submit][Status][Discuss]
Description
Input
Output
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<vector> 6 #define LL long long 7 #define ls x*2,l,mid 8 #define rs x*2+1,mid+1,r 9 #define N 200005 10 using namespace std; 11 LL gcd(LL a,LL b) 12 { 13 if(!b)return a; 14 return gcd(b,a%b); 15 } 16 int n,m; 17 int head[N],ver[N*2],nxt[N*2],tot; 18 void add(int a,int b) 19 { 20 tot++;nxt[tot]=head[a];head[a]=tot;ver[tot]=b;return ; 21 } 22 int dep[N],fa[N][20],dfn[N],z,ed[N]; 23 void dfs(int x,int f) 24 { 25 dfn[x]=++z; 26 for(int i=head[x];i;i=nxt[i]) 27 { 28 if(ver[i]==f)continue; 29 dep[ver[i]]=dep[x]+1; 30 fa[ver[i]][0]=x; 31 dfs(ver[i],x); 32 }ed[x]=z; 33 } 34 void yu() 35 { 36 for(int i=1;i<=17;i++) 37 { 38 for(int j=1;j<=n;j++) 39 { 40 fa[j][i]=fa[fa[j][i-1]][i-1]; 41 } 42 }return ; 43 } 44 int lca(int x,int y) 45 { 46 if(dep[x]<dep[y])swap(x,y); 47 for(int i=17;i>=0;i--) 48 { 49 if(dep[fa[x][i]]>=dep[y])x=fa[x][i]; 50 } 51 if(x==y)return x; 52 for(int i=17;i>=0;i--) 53 { 54 if(fa[x][i]!=fa[y][i]) 55 { 56 x=fa[x][i];y=fa[y][i]; 57 } 58 } 59 return fa[x][0]; 60 } 61 int a[N*8]; 62 void add(int x,int l,int r,int pos,int z) 63 { 64 if(l==r) 65 { 66 a[x]+=z; 67 return ; 68 } 69 int mid=(l+r)>>1; 70 if(pos<=mid)add(ls,pos,z); 71 else add(rs,pos,z); 72 a[x]=a[x*2]+a[x*2+1]; 73 } 74 int qur(int x,int l,int r,int ll,int rr) 75 { 76 if(ll>rr)return 0; 77 if(ll<=l&&rr>=r) 78 { 79 return a[x]; 80 } 81 int mid=(l+r)>>1; 82 if(ll>mid)return qur(rs,ll,rr); 83 if(rr<=mid)return qur(ls,ll,rr); 84 return qur(rs,ll,rr)+qur(ls,ll,rr); 85 } 86 struct qr 87 { 88 int x,y; 89 }q[N]; 90 struct node 91 { 92 int op,y; 93 node(int xx,int yy) 94 { 95 op=xx;y=yy; 96 } 97 }; 98 int faa(int x,int y) 99 { 100 for(int i=17;i>=0;i--) 101 { 102 if(dep[fa[x][i]]>dep[y])x=fa[x][i]; 103 } 104 return x; 105 } 106 vector<node>lazy[N]; 107 LL ans; 108 int sb[N]; 109 void dp(int x,int f) 110 { 111 for(int i=0;i<lazy[x].size();i++) 112 { 113 if(!lazy[x][i].op)continue; 114 if(lazy[x][i].op==1) 115 { 116 ans-=qur(1,1,n,dfn[lazy[x][i].y],ed[lazy[x][i].y]); 117 } 118 else 119 { 120 int yy=lazy[x][i].y; 121 int now=faa(x,yy); 122 ans-=qur(1,1,n,1,dfn[now]-1)+qur(1,1,n,ed[now]+1,n); 123 if(x==yy) 124 { 125 ans-=qur(1,1,n,dfn[x],dfn[x]); 126 } 127 } 128 } 129 for(int i=0;i<lazy[x].size();i++) 130 { 131 add(1,1,n,dfn[lazy[x][i].y],1); 132 if(lazy[x][i].op==1) 133 { 134 int uu=lca(x,lazy[x][i].y); 135 sb[uu]++; 136 } 137 } 138 for(int i=head[x];i;i=nxt[i]) 139 { 140 if(ver[i]==f)continue; 141 dp(ver[i],x); 142 } 143 for(int i=0;i<lazy[x].size();i++) 144 { 145 if(!lazy[x][i].op)continue; 146 if(lazy[x][i].op==1) 147 { 148 ans+=qur(1,1,n,dfn[lazy[x][i].y],ed[lazy[x][i].y]); 149 } 150 else 151 { 152 int yy=lazy[x][i].y; 153 int now=faa(x,yy); 154 if(x==yy) 155 { 156 ans+=qur(1,1,n,dfn[x],dfn[x]); 157 ans+=sb[x]; 158 } 159 ans+=qur(1,1,n,1,dfn[now]-1)+qur(1,1,n,ed[now]+1,n); 160 } 161 } 162 } 163 int main() 164 { 165 scanf("%d%d",&n,&m); 166 int t1,t2; 167 for(int i=1;i<n;i++) 168 { 169 scanf("%d%d",&t1,&t2); 170 add(t1,t2);add(t2,t1); 171 } 172 ans=-m; 173 dep[1]=1; 174 dfs(1,-1); 175 yu(); 176 for(int i=1;i<=m;i++) 177 { 178 scanf("%d%d",&q[i].x,&q[i].y); 179 int tmp=lca(q[i].x,q[i].y); 180 if(tmp==q[i].x) 181 { 182 lazy[q[i].y].push_back(node(2,q[i].x)); 183 if(q[i].x!=q[i].y)lazy[q[i].x].push_back(node(0,q[i].y)); 184 } 185 else if(tmp==q[i].y) 186 { 187 lazy[q[i].y].push_back(node(0,q[i].x)); 188 lazy[q[i].x].push_back(node(2,q[i].y)); 189 } 190 else 191 { 192 lazy[q[i].x].push_back(node(1,q[i].y)); 193 lazy[q[i].y].push_back(node(0,q[i].x)); 194 } 195 } 196 dp(1,-1); 197 LL tt=(LL)m*(m-1)/2; 198 LL oo=gcd(tt,ans); 199 printf("%lld/%lld\n",ans/oo,tt/oo); 200 return 0; 201 }
转载于:https://www.cnblogs.com/ezyzy/p/6411342.html
bzoj 3772 :精神污染 线段树+打标记 or 主席树相关推荐
- D-query SPOJ - DQUERY(求区间不同数的个数)(树状数组||线段树+离散)(主席树+在线)
English Vietnamese Given a sequence of n numbers a1, a2, -, an and a number of d-queries. A d-query ...
- BZOJ 2588 Spoj 10628 Count on a tree | 树上主席树
BZOJ 2588 Count on a tree 题面 求树上两点之间路径上第k大的点权. 题解 一开始看到这道题觉得是树剖,然后又听说是主席树,然后以为是主席树+树剖,差点没吓死-- 然后发现,如 ...
- H - Hello Ms. Ze(树状数组套主席树,线段树上二分)
H - Hello Ms. Ze 给定nnn种不同的材料,第iii种材料有aia_iai个,有mmm个操作,操作分为两类: 把第xxx种材料修改为yyy个, 只用[l,r][l, r][l,r]区间 ...
- zoj 2112 树状数组 套主席树 动态求区间 第k个数
总算是把动态求区间第k个数的算法看明白了. 在主席树的基础上,如果有修改操作,则要通过套树状数组来实现任意区间求第k小的问题. 刚开始看不明白什么意思,现在有一点理解.树状数组的每个元素是一个线段树, ...
- BZOJ1146[CTSC2008]网络管理——出栈入栈序+树状数组套主席树
题目描述 M公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门.为了让分布在世界各地的N个 部门之间协同工作,公司搭建了一个连接整个公司的通信网络.该网络的结构由N个路由器和N-1条 ...
- ICPC 徐州 H Yuuki and a problem (树状数组套主席树)
Yuuki and a problem 先不管第一问的修改操作,考虑如何达到第二问的查询操作, 题目要我们给出一个区间[l,r][l, r][l,r]中,不能通过权值+++得到的最小的数字是什么, 假 ...
- #279. [SYZOI Round1] 滑稽♂树(树状数组套主席树)
#279. [SYZOI Round1] 滑稽♂树 子树上的问题,考虑dfsdfsdfs序,第kkk大,可以用主席树嘛,支持修改,那就树状数组上套主席树,参考P4175 [CTSC2008]网络管理( ...
- 【BZOJ1901】Dynamic Rankings,树状数组套主席树
Time:2016.05.09 Author:xiaoyimi 转载注明出处谢谢 传送门(权限) 题面 1901: Zju2112 Dynamic Rankings Time Limit: 10 Se ...
- 【牛客】树的距离 树上主席树
[牛客]树的距离 树上主席树 题意 思路 Code(709MS) 传送门: 题意 给 一 颗 树 , 求 以 x 为 子 树 中 , 距 离 x 大 于 等 于 k 的 点 与 x 的 距 离 和 . ...
- BZOJ 1146: [CTSC2008]网络管理Network( 树链剖分 + 树状数组套主席树 )
树链剖分完就成了一道主席树裸题了, 每次树链剖分找出相应区间然后用BIT+(可持久化)权值线段树就可以完成计数. 但是空间问题很严重....在修改时不必要的就不要新建, 直接修改原来的..详见代码. ...
最新文章
- mac 安装mqtt
- linux一共有多少级别,简述linux的几个运行级别及其相应的含义。
- Android:可变参数Viarable
- JVM-运行时数据区
- Nginx教程-安装
- nginx模块开发—HTTP初始化之listen
- 算法竞赛入门经典(第二版) | 例题5-2 木块问题 (紫皮书牛啤!)(UVa101,The Blocks Problem)
- android tv 蓝牙服务_打电话、看电话,听清大千世界,不单只有助听器,力斯顿的尖端配件“无线通”“TV伴侣”了解一下。...
- 若依前后端分离集成Mybatis-Plus
- 谷歌修复另一枚已遭利用的 Chrome 释放后使用0day,细节未公开
- hdfs读写流程_必须掌握的分布式文件存储系统—HDFS
- 安装oracle bi apps,Oracle BI Apps 11.1.1.7.1 系统安装(十一,配置ODI)
- spring framework源码下载并导入eclipse
- 数字图像处理 冈萨雷斯(第四版)图像集合运算定义
- 用Python实现简单的服务器【新手必学】
- 医学自然语言处理(NLP)相关论文汇总之 NAACL 2022
- wps中图片怎么居中_Word文档技巧—文档中图片批量居中显示
- Mysql索引:图文并茂,深入探究索引的原理和使用
- iOS15适配本地通知功能
- 伽卡他卡使用教程_伽卡他卡电子教室安装使用和常见问题
热门文章
- ACM Southwestern European Regional Programming Contest (SWERC) 2017 J 智商题(模m同余)
- fflush(stdout)
- 【Matlab三维路径规划】A_star算法机器人栅格地图三维路径规划【含源码 190期】
- JavaScript 英文根据规则转成相对应的中文
- 箱形图适用于哪种数据_python数据分布型图表箱形图系列带误差线箱形图
- Docker学习笔记1
- 移动web开发+前端框架bootstrap相关笔记(二)
- JavaScript getDay()与getDate()
- Matting之Towards Enhancing Fine-grained Details for Image Matting
- 年关将至,房东不肯退押金,应当如何维权?| 法豸