bzoj5392 [Lydsy1806月赛]路径统计
分析
我们设sum[x]为小于等于x的点现在有多少联通
于是一个序列合法当且只当sum[R]-sum[L-1]=len且所有点度数不大于2
我们知道如果对于序列[L,R]满足条件则[L+1,R]一定满足
如果[L,R]不满足则[L-1,R]一定不满足
所以我们可以枚举R然后找最靠左的满足度数都小于2的L
用线段树维护信息查询区间内最大值是R的数的个数就是贡献
代码
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<string>
- #include<algorithm>
- #include<cctype>
- #include<cmath>
- #include<cstdlib>
- #include<queue>
- #include<ctime>
- #include<vector>
- #include<set>
- #include<map>
- #include<stack>
- using namespace std;
- int n,L,R,num,Max,cnt,col[],d[],sum[],du[];
- long long Ans;
- vector<int>high[],low[];
- inline void build(int le,int ri,int wh){
- sum[wh]=;
- d[wh]=ri;
- if(le==ri)return;
- int mid=(le+ri)>>;
- build(le,mid,wh<<);
- build(mid+,ri,wh<<|);
- }
- inline void pd(int wh){
- if(col[wh]){
- d[wh<<]+=col[wh];
- col[wh<<]+=col[wh];
- d[wh<<|]+=col[wh];
- col[wh<<|]+=col[wh];
- col[wh]=;
- }
- }
- inline void up(int wh){
- d[wh]=max(d[wh<<],d[wh<<|]);
- sum[wh]=(d[wh<<]==d[wh]?sum[wh<<]:)+(d[wh<<|]==d[wh]?sum[wh<<|]:);
- }
- inline void update(int le,int ri,int wh,int x,int y){
- if(le>=x&&ri<=y){
- col[wh]++;
- d[wh]++;
- return;
- }
- pd(wh);
- int mid=(le+ri)>>;
- if(mid>=x)update(le,mid,wh<<,x,y);
- if(mid<y)update(mid+,ri,wh<<|,x,y);
- up(wh);
- }
- inline void que(int le,int ri,int wh,int x,int y){
- if(le>=x&&ri<=y){
- if(d[wh]>Max)Max=d[wh],cnt=sum[wh];
- else if(d[wh]==Max)cnt+=sum[wh];
- return;
- }
- pd(wh);
- int mid=(le+ri)>>;
- if(mid>=x)que(le,mid,wh<<,x,y);
- if(mid<y)que(mid+,ri,wh<<|,x,y);
- up(wh);
- }
- inline void add(int x){
- for(int i=;i<low[x].size();i++){
- update(,n,,,low[x][i]);
- if(low[x][i]>=L)num+=((++du[x])==)+((++du[low[x][i]])==);
- }
- }
- inline void deal(int x){
- for(int i=;i<high[x].size();i++){
- if(high[x][i]<=R)num-=((--du[x])==)+((--du[high[x][i]])==);
- }
- }
- int main(){
- int i,j,k;
- scanf("%d",&n);
- for(i=;i<n;i++){
- int x,y;
- scanf("%d%d",&x,&y);
- if(x>y)swap(x,y);
- high[x].push_back(y);
- low[y].push_back(x);
- }
- L=;
- build(,n,);
- for(i=;i<=n;i++){
- R=i;
- add(i);
- while(num)deal(L),L++;
- Max=;
- que(,n,,L,i);
- if(Max==i)Ans+=1ll*cnt;
- }
- cout<<Ans;
- return ;
- }
bzoj5392 [Lydsy1806月赛]路径统计的更多相关文章
- [Lydsy1806月赛] 路径统计
题面在这里! xjb想的做法竟然不小心把std艹爆了qwq,我也很无奈啊.... 那接下来就说一下我的神奇做法qwq 如果是经常读我博客的童鞋会发现其实我以前就想要做这个题啦,只不过当时读错题啦... ...
- 键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数,注意:用文件类型(后缀名,不包含.(点),如:"java","txt")作为key, 用个数作为value,放入到map集合中,遍历map集合
package cn.it.zuoye5; import java.io.File;import java.util.HashMap;import java.util.Iterator;import ...
- 洛谷——P1608 路径统计
P1608 路径统计 题目描述 “RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方, ...
- 洛谷 P1608 路径统计
P1608 路径统计 题目描述 “RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方, ...
- bzoj5204: [CodePlus 2018 3 月赛]投票统计(离散化+暴力)
5204: [CodePlus 2018 3 月赛]投票统计 题目:传送门 题解: 谢谢niang老师的一道sui题 离散化之后直接搞啊(打完之后还错了...) 代码: #include<cst ...
- 某模拟赛C题 树上路径统计 (点分治)
题意 给定一棵有n个节点的无根树,树上的每个点有一个非负整数点权.定义一条路径的价值为路径上的点权和-路径上的点权最大值. 给定参数P,我!=们想知道,有多少不同的树上简单路径,满足它的价值恰好是P的 ...
- luogu1608 路径统计 (spfa)
题意:给一个有向图(无零边),要求找出最短路的数量(重边只计算一次) 做spfa的时候,记一个cnt对于u-w->v如果dis[u]+w=dis[v],cnt[v]+=cnt[u] 如果dis[ ...
- [Lydsy1806月赛] 超速摄像头
题面在这里! 可以证明只要叶子两两路径满足条件即可,于是便可以贪心啦,从最外圈(叶子)开始一层一层选,选出前 k/2 层. 如果k是奇数的话,还可以多选一个不是前 k/2 层的点. #include& ...
- luogu P1608 路径统计
题目描述 “RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方,而且他们目前处在标注为 ...
随机推荐
- 剑指offer-第六章面试中的各项能力(翻转单词的顺序VS左旋转字符串)
//题目1:翻转单词顺序例如“Hello world!”翻转后为world! Hello. //思路:首先翻转整个字符串,然后再分别翻转每个单词. //题目2:左旋转字符串,是将字符串的前面几个(n) ...
- 【msdn】RESTful 服务(配备 WCF)介绍
原文地址:http://msdn.microsoft.com/zh-cn/magazine/dd315413.aspx RESTful 服务(配备 WCF)介绍 Jon Flanders 代码下载位置 ...
- jfrog artifactory docker 安装试用
预备环境(docker 安装模式,使用的免费版本): docker-ce (启用镜像加速) 1. 镜像拉取 docker.bintray.io/jfrog/artifactory-oss 2. 启动 ...
- zabbix 触发器 | count 函数
摘要:确认多次zabbix监控中小编用的最多的是count的这函数,确认多次以减少了很多误告警,提高了运维效率.可以设置连续几次都异常才发出告警,这样一来,只要发出告警基本上就已经确定发生故障了.co ...
- 苹果手机 iTunes 资料备份到另一手机
百度教程 https://jingyan.baidu.com/article/d621e8da332e602865913f8e.html 直接使用iTunes将老手机的资料备份, (可能需要关闭手机定 ...
- 容器中跨主机的网络方案-Weave
容器中的网络是建立docker集群的重要内容. 本文将介绍如何用Weave实现容器的多节点互通. Weave是一个开源的项目,其网站为: https://www.weave.works/ 其工作原理相 ...
- .com .cn .org .edu等域名的意义
在开发的时候遇到了.org的域名,后来就去查了一下,原来这种域名是非盈利组织或者协会的标志 比如: https://getcomposer.org/ https://packagist.org/ ht ...
- Linux Skills
++实现RedHat非正常关机的自动磁盘修复先登录到服务器,然后在/etc/sysconfig里增加一个文件autofsck,内容如下:AUTOFSCK_DEF_CHECK=yesPROMPT=yes ...
- java数组求输入平均值
真是学了后面忘了前面,一维数组都忘了 package com.c2; //总结类型转换不对,导致运行报错 //以及没有new,导致空指针异常 //引入流. import java.io.*; publ ...
- 解决在“Resources”参数中指定了项“obj\Debug\KaiShiHID.Form1.resources”多次。“Resources”参数不支持重复项
错误截图: 发生原因描述: 窗体Form1, 有一个分部类; 叫做FormPartial.cs; 双击了FormPartial这个窗体, 然后生成了一个Load事件, 即时就报了编译错误, 然后就删除 ...