博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SPOJ 10707 COT2 - Count on a tree II
阅读量:7031 次
发布时间:2019-06-28

本文共 1550 字,大约阅读时间需要 5 分钟。

思路

树上莫队的题目

每次更新(u1,u2)和(v1,v2)(不包括lca)的路径,最后单独统计LCA即可

代码

#include 
#include
#include
#include
#include
using namespace std;int v[100100*2],fir[100100],nxt[100100*2],cnt=0,w_p[100100],b[100100],n,m,tx,sum,jump[100100][20],dep[100100],in_ans[100100],sz,belong[100100],block_cnt,ans[100100],color[100100],U,V;stack
S;void addedge(int ui,int vi){ ++cnt; v[cnt]=vi; nxt[cnt]=fir[ui]; fir[ui]=cnt;}void dfs(int u,int f){ jump[u][0]=f; for(int i=1;i<20;i++) jump[u][i]=jump[jump[u][i-1]][i-1]; dep[u]=dep[f]+1; int t=S.size(); for(int i=fir[u];i;i=nxt[i]){ if(v[i]==f) continue; dfs(v[i],u); if(S.size()-t>=sz){ ++block_cnt; while(S.size()>t){ belong[S.top()]=block_cnt; S.pop(); } } } S.push(u);}void init(void){ sz=sqrt(n); dfs(1,0);}int lca(int x,int y){ if(dep[x]
=0;i--) if(dep[jump[x][i]]>=dep[y]) x=jump[x][i]; if(x==y) return x; for(int i=19;i>=0;i--) if(jump[x][i]!=jump[y][i]) x=jump[x][i],y=jump[y][i]; return jump[x][0];}void modi_point(int x){ if(in_ans[x]){//erase color[w_p[x]]--; if(!color[w_p[x]]) sum--; } else{ if(!color[w_p[x]]) sum++; color[w_p[x]]++; } in_ans[x]^=1;}void move_path(int x,int y){//(x,y) except LCA(x,y) if(dep[x]
dep[y]){ modi_point(x); x=jump[x][0]; } while(x!=y){ modi_point(x); modi_point(y); x=jump[x][0]; y=jump[y][0]; }}struct Query{ int u,v,id; bool operator < (const Query &b) const{ return (belong[u]==belong[b.u])?belong[v]

转载于:https://www.cnblogs.com/dreagonm/p/10818681.html

你可能感兴趣的文章
BloomFilter 原理,实现及优化
查看>>
PHP本地文件包含漏洞环境搭建与利用
查看>>
OGNL设计及使用不当造成的远程代码执行漏洞
查看>>
Vue-cli + express 构建的SPA Blog(采用前后端分离方案)
查看>>
ios中的多播委托
查看>>
Java基础-单例模式
查看>>
轻仿QQ音乐之音频歌词播放、锁屏歌词
查看>>
MongoDB 4.0 RC 版本强势登陆
查看>>
AliOS Things网络适配框架 - SAL
查看>>
iOS 客户端与服务端做时间同步
查看>>
多个请求统一更新界面
查看>>
illuminate/routing 源码分析之注册路由
查看>>
网易公共技术Java研发工程师面经(offer)
查看>>
说说如何在登录页实现生成验证码功能
查看>>
笔记-softmax、softmax loss
查看>>
FastDFS蛋疼的集群和负载均衡(六)之Nginx高可用集群
查看>>
C语言入门经典读书笔记----第十一章 结构化数据
查看>>
Apache Thrift系列详解(二) - 网络服务模型
查看>>
chrome devtools使用详解——Performance
查看>>
了解一下ES6: 解构赋值&字符串
查看>>