传送门

分析

我们设sum[x]为小于等于x的点现在有多少联通

于是一个序列合法当且只当sum[R]-sum[L-1]=len且所有点度数不大于2

我们知道如果对于序列[L,R]满足条件则[L+1,R]一定满足

如果[L,R]不满足则[L-1,R]一定不满足

所以我们可以枚举R然后找最靠左的满足度数都小于2的L

用线段树维护信息查询区间内最大值是R的数的个数就是贡献

代码

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<string>
  5. #include<algorithm>
  6. #include<cctype>
  7. #include<cmath>
  8. #include<cstdlib>
  9. #include<queue>
  10. #include<ctime>
  11. #include<vector>
  12. #include<set>
  13. #include<map>
  14. #include<stack>
  15. using namespace std;
  16. int n,L,R,num,Max,cnt,col[],d[],sum[],du[];
  17. long long Ans;
  18. vector<int>high[],low[];
  19. inline void build(int le,int ri,int wh){
  20. sum[wh]=;
  21. d[wh]=ri;
  22. if(le==ri)return;
  23. int mid=(le+ri)>>;
  24. build(le,mid,wh<<);
  25. build(mid+,ri,wh<<|);
  26. }
  27. inline void pd(int wh){
  28. if(col[wh]){
  29. d[wh<<]+=col[wh];
  30. col[wh<<]+=col[wh];
  31. d[wh<<|]+=col[wh];
  32. col[wh<<|]+=col[wh];
  33. col[wh]=;
  34. }
  35. }
  36. inline void up(int wh){
  37. d[wh]=max(d[wh<<],d[wh<<|]);
  38. sum[wh]=(d[wh<<]==d[wh]?sum[wh<<]:)+(d[wh<<|]==d[wh]?sum[wh<<|]:);
  39. }
  40. inline void update(int le,int ri,int wh,int x,int y){
  41. if(le>=x&&ri<=y){
  42. col[wh]++;
  43. d[wh]++;
  44. return;
  45. }
  46. pd(wh);
  47. int mid=(le+ri)>>;
  48. if(mid>=x)update(le,mid,wh<<,x,y);
  49. if(mid<y)update(mid+,ri,wh<<|,x,y);
  50. up(wh);
  51. }
  52. inline void que(int le,int ri,int wh,int x,int y){
  53. if(le>=x&&ri<=y){
  54. if(d[wh]>Max)Max=d[wh],cnt=sum[wh];
  55. else if(d[wh]==Max)cnt+=sum[wh];
  56. return;
  57. }
  58. pd(wh);
  59. int mid=(le+ri)>>;
  60. if(mid>=x)que(le,mid,wh<<,x,y);
  61. if(mid<y)que(mid+,ri,wh<<|,x,y);
  62. up(wh);
  63. }
  64. inline void add(int x){
  65. for(int i=;i<low[x].size();i++){
  66. update(,n,,,low[x][i]);
  67. if(low[x][i]>=L)num+=((++du[x])==)+((++du[low[x][i]])==);
  68. }
  69. }
  70. inline void deal(int x){
  71. for(int i=;i<high[x].size();i++){
  72. if(high[x][i]<=R)num-=((--du[x])==)+((--du[high[x][i]])==);
  73. }
  74. }
  75. int main(){
  76. int i,j,k;
  77. scanf("%d",&n);
  78. for(i=;i<n;i++){
  79. int x,y;
  80. scanf("%d%d",&x,&y);
  81. if(x>y)swap(x,y);
  82. high[x].push_back(y);
  83. low[y].push_back(x);
  84. }
  85. L=;
  86. build(,n,);
  87. for(i=;i<=n;i++){
  88. R=i;
  89. add(i);
  90. while(num)deal(L),L++;
  91. Max=;
  92. que(,n,,L,i);
  93. if(Max==i)Ans+=1ll*cnt;
  94. }
  95. cout<<Ans;
  96. return ;
  97. }

bzoj5392 [Lydsy1806月赛]路径统计的更多相关文章

  1. [Lydsy1806月赛] 路径统计

    题面在这里! xjb想的做法竟然不小心把std艹爆了qwq,我也很无奈啊.... 那接下来就说一下我的神奇做法qwq 如果是经常读我博客的童鞋会发现其实我以前就想要做这个题啦,只不过当时读错题啦... ...

  2. 键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数,注意:用文件类型(后缀名,不包含.(点),如:"java","txt")作为key, 用个数作为value,放入到map集合中,遍历map集合

    package cn.it.zuoye5; import java.io.File;import java.util.HashMap;import java.util.Iterator;import ...

  3. 洛谷——P1608 路径统计

    P1608 路径统计 题目描述 “RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方, ...

  4. 洛谷 P1608 路径统计

    P1608 路径统计 题目描述 “RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方, ...

  5. bzoj5204: [CodePlus 2018 3 月赛]投票统计(离散化+暴力)

    5204: [CodePlus 2018 3 月赛]投票统计 题目:传送门 题解: 谢谢niang老师的一道sui题 离散化之后直接搞啊(打完之后还错了...) 代码: #include<cst ...

  6. 某模拟赛C题 树上路径统计 (点分治)

    题意 给定一棵有n个节点的无根树,树上的每个点有一个非负整数点权.定义一条路径的价值为路径上的点权和-路径上的点权最大值. 给定参数P,我!=们想知道,有多少不同的树上简单路径,满足它的价值恰好是P的 ...

  7. luogu1608 路径统计 (spfa)

    题意:给一个有向图(无零边),要求找出最短路的数量(重边只计算一次) 做spfa的时候,记一个cnt对于u-w->v如果dis[u]+w=dis[v],cnt[v]+=cnt[u] 如果dis[ ...

  8. [Lydsy1806月赛] 超速摄像头

    题面在这里! 可以证明只要叶子两两路径满足条件即可,于是便可以贪心啦,从最外圈(叶子)开始一层一层选,选出前 k/2 层. 如果k是奇数的话,还可以多选一个不是前 k/2 层的点. #include& ...

  9. luogu P1608 路径统计

    题目描述 “RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方,而且他们目前处在标注为 ...

随机推荐

  1. codevs4189字典

    沙茶 题目大意:求某一个字符串前缀有没有在n个字符串前缀里出现过 题解:Trie树 查询前缀有没有出现 代码: //codevs4189 #include<iostream> #inclu ...

  2. Maven根据不同的环境打包不同的配置

    前言: 在开发过程中,我们的软件会面对不同的运行环境,比如开发环境.测试环境.生产环境,而我们的软件在不同的环境中,有的配置可能会不一样,比如数据源配置.日志文件配置等等. 那么就需要借助maven提 ...

  3. C#中Cache的使用

    公共方法Add 将指定项添加到 Cache 对象,该对象具有依赖项.过期和优先级策略以及一个委托(可用于在从 Cache 移除插入项时通知应用程序). Equals(从 Object 继承) 已重载. ...

  4. Java之父职场路

    Java之父——詹姆斯·高斯林出生于加拿大,是一位计算机编程天才.在卡内基·梅隆大学攻读计算机博士学位时,他编写了多处理器版本的Unix操作系统,是JAVA编程语言的创始人.1991年,在Sun公司工 ...

  5. ui-router 1.0以上的 $stateChangeStart

    ui-router transitionhooks 统一控制路由跳转, 前台控制如果没有登录就跳转到登录页面, 当然也可以在后台控制, 如果没有登录就返回对应的错误码, 然后在response中直接跳 ...

  6. Eclipse里git提交冲突rejected – non-fast-forward

    Eclipse里commit代码,其实只是提交到本地仓库,需要push才会提交到远程的git仓库,这时是一个本地仓库到远程仓库的同步过程.Git是分布式的,每个人在本地仓库维护本地的自己的那一份代码, ...

  7. 1127 ZigZagging on a Tree

    题意:中序序列+后序序列构建二叉树,之字形输出其层序序列. 思路:在结点的数据域中额外增加一个layer表示结点所在的层次,并定义vector<int> zigzag[maxn]存放最终结 ...

  8. zabbix的sendEmail配置

    zabbix的sendEmail配置 [root@hongquan scripts]# yum install sendmail[root@hongquan soft]# tar xvzf sendE ...

  9. Spring MVC启动时初始化的几个常用方法

    Spring-MVC的应用中,要实现类似的功能,主要是通过实现下面这些接口(任选一,至少一个即可) 一.ApplicationContextAware接口 +? 1 2 3 4 5 6 7 8 9 p ...

  10. 使用QuartZ.net来做定时计划任务 ; 值不能为 null。 参数名: assemblyString

    1. 当异常的时候, 发现需要的类名, 没有取到, 然后就发生异常了 2. 分析: 业务层调用数据层, 数据层去掉配置的时候, 发现配置文件中根本就没有配置, 这个时候使用反射来取, 肯定是拿不到的, ...