BZOJ_3772_精神污染_主席树
BZOJ_3772_精神污染_主席树
Description
Input
Output
Sample Input
1 2
2 3
3 4
2 5
3 5
2 5
1 4
Sample Output
样例解释
可以选择的路径对有(1,2),(1,3),(2,3),只有路径1完全覆盖路径2。
HINT
#include <cstdio>
#include <string.h>
#include <algorithm>
using namespace std;
#define N 100050
typedef long long ll;
int head[N],to[N<<1],nxt[N<<1],cnt,n,m,root[N],maxn;
int fa[N],top[N],siz[N],son[N],dep[N],dfn[N],S[N],out[N],t[N*39],tot,ls[N*39],rs[N*39];
inline void add(int u,int v) {
to[++cnt]=v; nxt[cnt]=head[u]; head[u]=cnt;
}
void insert(int &y,int x,int l,int r,int v,int c) {
y=++tot; t[y]=t[x]+c;
if(l==r) return ;
int mid=(l+r)>>1;
if(v<=mid) rs[y]=rs[x],insert(ls[y],ls[x],l,mid,v,c);
else ls[y]=ls[x],insert(rs[y],rs[x],mid+1,r,v,c);
}
int query(int a,int b,int c,int d,int l,int r,int x,int y) {
if(x<=l&&y>=r) return t[a]+t[b]-t[c]-t[d];
int mid=(l+r)>>1,re=0;
if(x<=mid) re+=query(ls[a],ls[b],ls[c],ls[d],l,mid,x,y);
if(y>mid) re+=query(rs[a],rs[b],rs[c],rs[d],mid+1,r,x,y);
return re;
}
void dfs1(int x,int y) {
S[++S[0]]=x; dfn[x]=++maxn;
int i; dep[x]=dep[y]+1; fa[x]=y; siz[x]=1;
for(i=head[x];i;i=nxt[i]) if(to[i]!=y) {
dfs1(to[i],x); siz[x]+=siz[to[i]];
if(siz[to[i]]>siz[son[x]]) son[x]=to[i];
}
out[x]=++maxn;
}
void dfs2(int x,int t) {
top[x]=t; int i; if(son[x]) dfs2(son[x],t);
for(i=head[x];i;i=nxt[i]) if(to[i]!=fa[x]&&to[i]!=son[x]) dfs2(to[i],to[i]);
}
int lca(int x,int y) {
while(top[x]!=top[y]) {
if(dep[top[x]]>dep[top[y]]) swap(x,y);
y=fa[top[y]];
}
return dep[x]<dep[y]?x:y;
}
ll gcd(ll x,ll y) {
return y?gcd(y,x%y):x;
}
int main() {
scanf("%d%d",&n,&m);
int i,x,y,j;
for(i=1;i<n;i++) {
scanf("%d%d",&x,&y);
add(x,y); add(y,x);
}
dfs1(1,0);
dfs2(1,1);
memset(head,0,sizeof(head)); cnt=0;
for(i=1;i<=m;i++) {
scanf("%d%d",&x,&y);
add(x,y);
}
for(j=1;j<=n;j++) {
x=S[j];
root[x]=root[fa[x]];
for(i=head[x];i;i=nxt[i]) {
y=to[i];
insert(root[x],root[x],1,maxn,dfn[y],1);
insert(root[x],root[x],1,maxn,out[y],-1);
}
}
ll ans=0,dev=1ll*m*(m-1)/2;;
for(x=1;x<=n;x++) {
for(i=head[x];i;i=nxt[i]) {
y=to[i];
int l=lca(x,y);
ans+=query(root[x],root[y],root[l],root[fa[l]],1,maxn,dfn[l],dfn[x]);
ans+=query(root[x],root[y],root[l],root[fa[l]],1,maxn,dfn[l],dfn[y]);
ans-=query(root[x],root[y],root[l],root[fa[l]],1,maxn,dfn[l],dfn[l]);
ans--;
}
}
ll tmp=gcd(ans,dev);
printf("%lld/%lld\n",ans/tmp,dev/tmp);
}
BZOJ_3772_精神污染_主席树的更多相关文章
- BZOJ3772 精神污染 【主席树 + dfs序】
题目 兵库县位于日本列岛的中央位置,北临日本海,南面濑户内海直通太平洋,中央部位是森林和山地,与拥有关西机场的大阪府比邻而居,是关西地区面积最大的县,是集经济和文化于一体的一大地区,是日本西部门户,海 ...
- BZOJ_3514_Codechef MARCH14 GERALD07加强版_主席树+LCT
BZOJ_3514_Codechef MARCH14 GERALD07加强版_主席树+LCT Description N个点M条边的无向图,询问保留图中编号在[l,r]的边的时候图中的联通块个数. I ...
- BZOJ_4448_[Scoi2015]情报传递_主席树
BZOJ_4448_[Scoi2015]情报传递_主席树 Description 奈特公司是一个巨大的情报公司,它有着庞大的情报网络.情报网络中共有n名情报员.每名情报员口J-能有 若T名(可能没有) ...
- BZOJ_3932_[CQOI2015]任务查询系统_主席树
BZOJ_3932_[CQOI2015]任务查询系统_主席树 题意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,P ...
- BZOJ_3123_[Sdoi2013]森林_主席树+启发式合并
BZOJ_3123_[Sdoi2013]森林_主席树+启发式合并 Description Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20 ...
- BZOJ_4026_dC Loves Number Theory _主席树+欧拉函数
BZOJ_4026_dC Loves Number Theory _主席树+欧拉函数 Description dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯 竭 ...
- [bzoj4826][Hnoi2017]影魔_单调栈_主席树
影魔 bzoj-4826 Hnoi-2017 题目大意:给定一个$n$个数的序列$a$,求满足一下情况的点对个数: 注释:$1\le n,m\le 2\cdot 10^5$,$1\le p1,p2\l ...
- [bzoj5343][Ctsc2018]混合果汁_二分答案_主席树
混合果汁 bzoj-5343 Ctsc-2018 题目大意:给定$n$中果汁,第$i$种果汁的美味度为$d_i$,每升价格为$p_i$,每次最多添加$l_i$升.现在要求用这$n$中果汁调配出$m$杯 ...
- [bzoj3295][Cqoi2011]动态逆序对_主席树
动态逆序对 bzoj-3295 Cqoi-2011 题目大意:题目链接. 注释:略. 想法:直接建立主席树. 由于是一个一个删除,所以我们先拿建立好的root[n]的权值线段树先把总逆序对求出来,接着 ...
随机推荐
- Android 加载gif图片强大框架(支持预加载、缓存,还支持显示静态图片,一行代码全搞定)
之前项目中没有涉及到显示gif图片的功能,也没有着重研究过,最近项目中要用到显示gif图片,于是就在网上一顿搜,用过之后发现如下几个缺点. 1.加载大的gif图片会出现oom. 2.没有预加载和缓存功 ...
- Jbpm工作流(一)
了解一下什么是Jbpm及特点. jBPM,全称是Java Business Process Management,是一种基于J2EE的轻量级工作流管理系统.jBPM是公开源代码项目,它使用要遵循 Ap ...
- C++string函数之strcpy_s
strcpy_s和strcpy()函数的功能几乎是一样的.strcpy函数,就象gets函数一样,它没有方法来保证有效的缓冲区尺寸,所以它只能假定缓冲足够大来容纳要拷贝的字符串.在程序运行时,这将导致 ...
- FFMpeg编译之路
为了编译这个东西,快折腾了一个星期了.期间经历了很多痛苦的过程,今天我把整个过程,以及在这个过程的感悟写下来,以备日后查看,也希望能帮到一些像我一样的兄弟姐妹. 在这一个星期里前前后后加起来总共使用了 ...
- MFC半透明对话框
int CTestDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CDialog::OnCreate(lpCreateStruct) == -1) ...
- 多线程中操作UI
遇到过要在工作线程中去更新UI以让用户知道进度,而在多线程中直接调用UI控件操作是错误的做法. 最后解决方法是将操作UI的代码封装,通过Invoke / BeginInvoke 去委托调用. 代码封装 ...
- kaggle入门项目:Titanic存亡预测 (一)比赛简介
自从入了数据挖掘的坑,就在不停的看视频刷书,但是总觉得实在太过抽象,在结束了coursera上Andrew Ng 教授的机器学习课程还有刷完一整本集体智慧编程后更加迷茫了,所以需要一个实践项目来扎实之 ...
- JavaScript高级程序设计(一)
一.三种常见的著名的命名规则: 1.Camel(驼峰式命名):首字母是小写的,接下来的单词都以大写字母开头.例如:var myTestValue=0; 2.Pascal(帕斯卡命名):首字母是大写的 ...
- 纯干货!耗时1个月整理黑马程序员Java教程+笔记+配套工具
学习Java是不是很苦?找不到资料?不了解学习步骤?想要全面的线路图! 或者是找资料,前面免费,后面收费?工具软件要收费? 当当当~~今天就没有这个状态发生了!不信就证明给你看 1.学习路线图 2.J ...
- 我的Python之旅第二天
一 .字符串操作 1单引号('').双引号("").三引号(""" """)的区别. 如果字符串中不包含单引号.双引号, ...