实在搞不过第二轮的题了、、小火车的题太劲了

所以就在其他队爷虐题的时候默默地修炼算法、

这个题挺裸的、、唯一要注意的就是边权要赋到点上、

所以是这样的:

还要注意一些易错点:

1、跳重链比较的是top的父亲

2、由于点权模拟边权,所以跳的时候  a、b正常,,  重链相同时注意要a-1,b

第一次一遍ac

码:

#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
#define zuo o<<1,l,mid
#define you o<<1|1,mid+1,r
#define M 250005
int he[M<<2],N,ql[M<<2],ans,top[M],fu[M],x,y,n,m,i,j,sz[M],a,b,op,d[M],dui[M],hson[M];
vector<int>v[M];
char ch;
void up(int o)
{
he[o]=he[o<<1]+he[o<<1|1];
}
void down(int o)
{int ll=o<<1;int rr=o<<1|1;if(ql[o]){he[ll]=0;he[rr]=0;ql[ll]=1;ql[rr]=1;     ql[o]=0;}
}
void jian(int o,int l,int r)
{if(l==r){he[o]=1;if(l==1)he[o]=0;return;     }int mid=(l+r)>>1;jian(zuo);jian(you);
up(o);
}
void gai(int o,int l,int r)
{if(a<=l&&b>=r){if(op==1){        he[o]=0;ql[o]=1;}else{ans+=he[o];}      return ;}down(o);int mid=(l+r)>>1;if(a<=mid)gai(zuo);if(b>mid)gai(you);up(o);
}
void dfs1(int now,int fa,int shen)
{fu[now]=fa;sz[now]=1;d[now]=shen;for(int i=0;i<v[now].size();i++){int nd=v[now][i];if(nd==fa)continue;dfs1(nd,now,shen+1);sz[now]+=sz[nd];if(sz[hson[now]]<sz[nd])hson[now]=nd; }
}
void dfs2(int now,int tap)
{top[now]=tap;dui[now]=++N;if(hson[now])dfs2(hson[now],tap);for(int i=0;i<v[now].size();i++){int nd=v[now][i];if(nd==hson[now]||nd==fu[now])continue;dfs2(nd,nd);        }
}
void work(int x,int y)
{ans=0;while(top[x]!=top[y]){if(d[top[x]]>d[top[y]])swap(x,y);if(op==1){a=dui[top[y]];b=dui[y];op=1;gai(1,1,N);}if(op==2){a=dui[top[y]];b=dui[y];//   ans+=op=2;gai(1,1,N);}y=fu[top[y]];}if(d[y]<d[x])swap(y,x);a=dui[x]+1;b=dui[y];gai(1,1,N);
}
int main()
{scanf("%d",&n);for(i=1;i<n;i++){scanf("%d%d",&x,&y);v[x].push_back(y);v[y].push_back(x);     }dfs1(1,0,1);dfs2(1,1);jian(1,1,N);scanf("%d",&m);for(int i=1;i<=n+m-1;i++){//cout<<i<<endl;scanf("%c",&ch);while(ch=='\n'||ch=='\0')   scanf("%c",&ch);if(ch=='A'){scanf("%d%d",&x,&y);op=1;work(x,y);        }else{scanf("%d",&y);op=2;work(1,y); printf("%d\n",ans);}}
}

2017.6.21 大都市meg 思考记录相关推荐

  1. 2017.4.21 螺旋矩阵 思考记录

    失误之处在于边界判错了...还有通项时没加括号. 一定要仔细,特别是易错点要重点检查 码: #include<iostream> #include<cstdio> using ...

  2. 2017.3.24 分裂游戏 思考记录

    事先说明:这不是好题解,这只是思考记录 同机房的xp都学博弈了..    感觉还是学学看吧 先来看一下简单的nim: 题目: Alice和Bob放置了N堆不同的石子,编号1..N,第i堆中有A[i]个 ...

  3. 2017.3.6 地精部落 思考记录

    其实这个题第一眼是没有任何思路的 强行无视题解,经过漫长的找规律,终于推出了一个可行的方法: f[i][0/1]i表示最高位的数字,0表示开始是上升,1表示开始是下降. 为什么会推出这个? 1.因为所 ...

  4. 2017.10.24 上升序列 思考记录

    终于有会做的题了... 一开始想用正常的lis ,然后从前往后扫, 由于最优查询区间在序列上是按顺序单调递增的,所以想记录每个点取哪个值跳到哪,这样是n*m logn的 然后发现既然是单调递增的那直接 ...

  5. 2017.10.7 括号序列 思考记录

    这个题看起来很简单,但细节比较麻烦.参考完别人的代码后才想出自己的解法的.. 一开始认为已匹配的括号是可以直接消的,所以就只维护了两个变量 但还有区间取反.. 由于和已配对的括号的顺序有关,所以不是很 ...

  6. 2017.9.28 约数研究 思考记录

    这个题一开始可能会想复杂, 然而它需要对答案的贡献进行归类 可以发现,一个约数对其倍数的数贡献是一样的,,所以可以考虑离散 所以直接对于每个数不好求,就可以考虑每个约数的贡献 而每个约数i就有n/i个 ...

  7. 2017.5.11 道路修建 思考记录

    这个线段树一眼秒了(主要是有前面的思考经验) 就是维护两个列对应线段上的形态.,比较好想的 但数据结构题有个特点--使你知道结构也不会做----会做也会很大概率爆零.... 所以数据结构题必须 小数据 ...

  8. 2017.5.9 积木大赛 思考记录

    为什么要把这个题放上来?因为这个题还是很有代表性的 首先必须要跳出模拟的思考: 可以忽视每一步具体的操作,直接看目标,这样就会总结出一些规律: 连续上升或连续下降的序列次数一定是最大值,因为每次都可以 ...

  9. 2017.4.25 解方程 思考记录

    这个题好乱啊..n*m就会炸,每个数还都可能是10^10000..这n*ai tm读进去都要10^6效率  . 一般这种似乎没有任何数论定理的东西范围还这么变态只能考虑随机化算法了.. 似乎可以用取模 ...

最新文章

  1. php 导出excel 特殊字符,PHPEXCEL导出,存在特殊字符遇到的问题
  2. python-面向对向-实例方法的继承
  3. 哗啦啦用Java_哗啦啦
  4. Kudu报错:你的主机中的软件终止了一个已建立的链接
  5. Autoware(2)—加载地图数据
  6. 【转】VC++计算当前时间点间隔N天的时间(不使用CTimeSpan类)
  7. c语言程序计算4阶行列式的值,如何用降阶法求解四阶行列式的计算,请帮我编一个C语言程序。...
  8. 使用Java实现面向对象编程(6)
  9. WTL 自绘控件库 (CQsEdit)
  10. 使用百度统计对网站进行流量分析和统计
  11. 基于jsp+mysql+Spring+SpringMVC+mybatis的大学生缴费系统
  12. mac bookpro m1 笔记本关闭键盘屏幕 禁用键盘屏幕使用 键盘屏幕误触 Touch Bar禁用 禁用MacBook-Pro的触摸栏
  13. iOS app图标和相关尺寸
  14. 版本管理工具和as的一些配置
  15. 第二次作业:网易云音乐案例分析
  16. 监控云—反盗版软件之利器!
  17. 离行式ATM机搭建数据传输VPN安全网络解决方案
  18. 男生看女生叫审美,女生看男生叫好色——新解
  19. Hadoop 深入浅出 ---- 入门 (1)
  20. [灯哥开源—四足机器人]程序算法讲解与STM32移植——PA_TROT和PA_WALK讲解和trot步态,walk步态,步态规划

热门文章

  1. conda虚拟环境中使用pip仍然安装到全局python中
  2. rgb颜色查询工具_Web前端页面重构之工具篇(Photoshop)
  3. 卡尔曼滤波对gps轨迹数据清洗_基于GPS的智能交通系统车辆定位精度提升技术
  4. MySQL统计两部分查询结果记录数量比值
  5. Spark 配置指南
  6. vs能运行python吗_vs怎么运行python(vs能运行python吗)
  7. JavaMail---简介
  8. 为什么微软账号被暂时停用_微软向Win10 20H2推出测试版更新KB4586853修复多种已知问题...
  9. oracle函数lad,01-查询Oracle中所有用户信息
  10. 腾讯云linux服务器怎么使用图形化界面_winscp使用方法,winscp使用方法详细说明...