[UOJ] #217. 【UNR #1】奇怪的线段树
题解见大佬博客
我的丑陋代码:
#include<cstdio>
#include<cstring>
#include<cstdlib>
inline int read()
{
int x;char c;
while((c=getchar())<''||c>'');
for(x=c-'';(c=getchar())>=''&&c<='';)x=x*+c-'';
return x;
}
#define MN 8000
#define MV 16000
#define ME 56000
#define INF 0x3FFFFFFF
struct edge{int nx,t,l,w;}e[ME*+];
int S=MV+,T=MV+,h[MV+],en=,d[MV+],q[MV+],qn,c[MV+];
int cnt=,L[MN+],R[MN+],u[MN+],z[MN+],fa[MN+];
inline void ins(int x,int y,int l,int w)
{
e[++en]=(edge){h[x],y,l,w};h[x]=en;
e[++en]=(edge){h[y],x,,};h[y]=en;
}
bool build(int k,int l,int r)
{
u[k]=read();
if(k>&&u[k]&&!u[fa[k]])exit(*puts("OwO"));
if(l<r)
{
int mid;
fa[L[k]=++cnt]=k;build(L[k],l,mid=read());
fa[R[k]=++cnt]=k;build(R[k],mid+,r);
z[L[k]]=R[k];
ins(k,L[k],,INF);
}
L[k]=l;R[k]=r;
}
bool bfs()
{
int i,j;
memset(d,,sizeof(d));
for(d[q[i=qn=]=S]=;i<=qn;++i)for(j=c[q[i]]=h[q[i]];j;j=e[j].nx)
if(e[j].w&&!d[e[j].t])d[q[++qn]=e[j].t]=d[q[i]]+;
return d[T];
}
int dfs(int x,int r)
{
if(x==T)return r;
int k,u=;
for(int&i=c[x];i;i=e[i].nx)if(e[i].w&&d[e[i].t]==d[x]+)
{
k=dfs(e[i].t,r-u<e[i].w?r-u:e[i].w);
u+=k;e[i].w-=k;e[i^].w+=k;
if(u==r)return u;
}
return d[x]=,u;
}
int main()
{
int n=read(),i,j;
build(,,n);
for(i=;i<*n;++i)if(u[i])
{
ins(S,i,,INF);
for(j=i;++j<*n;)if(L[i]<=L[j]&&R[i]>=R[j]&&u[j])u[i]=;
ins(i,i+*n,u[i],INF);
ins(i+*n,T,,INF);
for(j=i;++j<*n;)if(R[i]+==L[j]&&z[i]!=j){ins(i+*n,j,,INF);break;}
}
for(i=;i<=T;++i)for(j=h[i];j;j=e[j].nx)d[i]-=e[j].l,d[e[j].t]+=e[j].l,e[j].w-=e[j].l;
for(S+=,T+=,i=;i<S;++i)
{
if(d[i]<)ins(i,T,,-d[i]);
if(d[i]>)ins(S,i,,d[i]);
}
while(bfs())dfs(S,INF);
ins(T-,S-,,INF);
while(bfs())dfs(S,INF);
for(i=h[S-];i;i=e[i].nx)if(e[i].t==T-)printf("%d",e[i].w);
}
[UOJ] #217. 【UNR #1】奇怪的线段树的更多相关文章
- [UOJ UNR#1]奇怪的线段树
来自FallDream的博客,未经允许,请勿转载, 谢谢. 原题可以到UOJ看,传送门 如果存在一个点是白的,却有儿子是黑的,显然无解. 不然的话,只要所有黑色的“黑叶子”节点,即没有黑色的儿子的节点 ...
- 「UNR#1」奇怪的线段树
「UNR#1」奇怪的线段树 一道好题,感觉解法非常自然. 首先我们只需要考虑一次染色最下面被包含的那些区间,因为把无解判掉以后只要染了一个节点,它的祖先也一定被染了.然后发现一次染色最下面的那些区间一 ...
- UOJ #164 [清华集训2015]V (线段树)
题目链接 http://uoj.ac/problem/164 题解 神仙线段树题. 首先赋值操作可以等价于减掉正无穷再加上\(x\). 假设某个位置从前到后的操作序列是: \(x_1,x_2,..., ...
- UOJ#7. 【NOI2014】购票 | 线段树 凸包优化DP
题目链接 UOJ #7 题解 首先这一定是DP!可以写出: \[f[i] = \min_{ancestor\ j} \{f[j] + (d[j] - d[i]) * p[i] + q[i]\}\] 其 ...
- UOJ #314. 【NOI2017】整数 | 线段树 压位
题目链接 UOJ 134 题解 可爱的电音之王松松松出的题--好妙啊. 首先想一个朴素的做法! 把当前的整数的二进制当作01序列用线段树维护一下(序列的第i位就是整数中位权为\(2^k\)的那一位). ...
- 【uoj#228】基础数据结构练习题 线段树+均摊分析
题目描述 给出一个长度为 $n$ 的序列,支持 $m$ 次操作,操作有三种:区间加.区间开根.区间求和. $n,m,a_i\le 100000$ . 题解 线段树+均摊分析 对于原来的两个数 $a$ ...
- [UOJ217]奇怪的线段树
如果一个节点是$0$但它子树内有$1$那么无解,否则我们只需把那些是$1$但子树内没有其他$1$的节点(这些区间是被定位的区间)都访问一遍即可 根据ZKW线段树定位区间的过程,可以发现一段(从左到右) ...
- UOJ#299. 【CTSC2017】游戏 线段树 概率期望 矩阵
原文链接www.cnblogs.com/zhouzhendong/p/UOJ299.html 前言 不会概率题的菜鸡博主做了一道概率题. 写完发现运行效率榜上的人都没有用心卡常数——矩阵怎么可以用数组 ...
- UOJ 217 奇怪的线段树
http://uoj.ac/problem/217 题意就不X了,思路在这: 居然一开始把sap里面的mn设置为inf了,我是傻逼.. #include<cstdio> #include& ...
随机推荐
- C语言第四次博客作业
一.PTA实验作业 题目1.梅森数 1.本题PTA提交列表(要提交列表,不是结果) 2. 设计思路(此处用流程图最好) 1.定义三个变量n,num,count,且初始化count为1 2.读取一个数n ...
- C语言——第一次作业
**学习内容总结** 本周进行了算法的初步学习,用计算机的思维方式去思考问题,并学习了如何用传统程序框图表示算法. 相关内容: 1.算法是用来解决问题的方法与步骤. 2.计算机擅长重复,常用枚举的方法 ...
- python 继承基础
class annamal: def chi(self): print(self.name + '吃') def he(self): print(self.name + '喝') class dog( ...
- python的dir、help、str用法
当你给dir()提供一个模块名字时,它返回在那个模块中定义的名字的列表.当没有为其提供参数时, 它返回当前模块中定义的名字的列表.dir() 函数使用举例: 1 2 3 4 5 6 >>& ...
- DSkin 的WebUI开发模式介绍,Html快速开发Winform的UI
新版WebUI开发模式采用MiniBlink内核,这个内核功能更完善,dll压缩之后才5M,而且提供开发者功能,内核还在更新中,而且是开源项目:https://github.com/weolar/mi ...
- 老帖收藏,留供参考:SpringMvc2.5+Mybatis3.2.7
一.项目背景 SpringMvc+Mybatis 数据库连接池是阿里巴巴的druid.日志框架式logback 二.配置文件 1.SpringMvc-servlet.xml <?xml vers ...
- spring-oauth-server实践:授权方式四:client_credentials 模式下access_token的产生
授权结果 获取access_token成功, 访问资源服务器API http://localhost:9000/api-gateway-engine/unity/user_info?access_to ...
- vue2.0项目引入element-ui
在项目中,为了方便我们工作和开发效率,常常引入一些框架来帮助我们完成高效的工作,今天我们就用vue来搭建一下框架,并且引入element-ui这个框架.安装流程也是我从失败中摸索到的,希望能帮助大家. ...
- MySQL/上
MySQL操作/上 一.视图 视图表是一个虚拟表(非真实存在),其本质是[根据sql语句获取动态的数据集,并为其命名],用户使用表只需使用(名称)即可获取结果集,并可以将其当做表来使用. 1.创建视图 ...
- angular-单页面应用程序
我们都知道angularjs是单一页面应用程序,那什么是单一页面应用程序呢?单一页面应用程序到底有什么好处呢? 下面我们来看一下: 首先我觉得可以把页面的响应模式分成这样大概3个阶段: 1. 最传统的 ...