BZOJ1135 LYZ(POI2009) Hall定理+线段树
2024-09-05 22:41:43
做这个题之前首先要了解判定二分图有没有完备匹配的Hall定理:
那么根据Hell定理,如果任何一个X子集都能连大于等于|S|的Y子集就可以获得完备匹配,那么就是:
题目变成只要不满足上面这个条件就能得到完备匹配,注意到右边的这个dk是一个常数,那么我们就可以只考虑左边最大的是否满足就行了。
那么我们就可以在修改过程中一边在线段树上修改一边查询区间最大值作比较就可以了。
#include <bits/stdc++.h>
using namespace std;
const int N=;
typedef long long ll;
int n,m;
ll k,d,sum[N],lftsum[N],rhtsum[N],mxsum[N]; void buildtree(int no,int l,int r) {
lftsum[no]=rhtsum[no]=mxsum[no]=;
if (l==r) {sum[no]=-k;return;}
int mid=(l+r)>>;
buildtree(no<<,l,mid);
buildtree(no<<|,mid+,r);
sum[no]=sum[no<<]+sum[no<<|];
} void pushup(int no) {
sum[no]=sum[no<<]+sum[no<<|];
mxsum[no]=max(max(mxsum[no<<],mxsum[no<<|]),rhtsum[no<<]+lftsum[no<<|]);
lftsum[no]=max(lftsum[no<<],lftsum[no<<|]+sum[no<<]);
rhtsum[no]=max(rhtsum[no<<|],rhtsum[no<<]+sum[no<<|]);
} void modify(int no,int l,int r,int pos,ll x) {
if (l==r) {
sum[no]+=x;
lftsum[no]=rhtsum[no]=mxsum[no]=max(sum[no],(ll));
return;
}
int mid=(l+r)>>;
if (pos<=mid) modify(no<<,l,mid,pos,x);
else modify(no<<|,mid+,r,pos,x);
pushup(no);
} int main()
{
scanf("%d%d%lld%lld",&n,&m,&k,&d);
buildtree(,,n-d);
for(int i=;i<=m;i++) {
int r;
ll x;
scanf("%d%lld",&r,&x);
modify(,,n-d,r,x);
if (mxsum[]>d*k) printf("NIE\n");
else printf("TAK\n");
}
return ;
}
最新文章
- zabbix安装
- Oracle数据库找回密码
- MySql UDF 调用外部程序和系统命令
- [BZOJ1604][Usaco2008 Open]Cow Neighborhoods 奶牛的邻居
- Model2模型介绍
- 关于谷歌浏览器下自动填写密码的bug
- Linux软件
- 使用XStream是实现XML与Java对象的转换(4)--转换器
- 【竞价网站绝技】根据访客ip,页面显示访客所属城市的html代码(借用YY IP地址库)
- bootstrapValidator表单验证插件
- 06 元祖 字典 集合set
- 如何用css实现";等高布局";。
- 70. Climbing Stairs爬楼梯
- 每天CSS学习之text-shadow
- Mac怎么安装并配置Homebrew?
- js监听浏览器tab窗口切换
- nginx:在centos中自启动
- div+css网页标准布局实例教程(一)
- [UE4]机器人自动寻路
- 通过Github Pages在线查看百度前端技术学院完成的任务成果
热门文章
- Java中高级面试题(1)
- 登陆一个系统时,前端js实现的验证,记住密码等功能
- uniapp开发
- ReentrantLock 源码分析
- 007-Spring Boot-@Enable*注解的工作原理-EnableConfigurationProperties、ImportSelector、ImportBeanDefinitionRegistrar
- iView 实战系列教程(21课时)_1.iView 实战教程之配置篇_图片优化
- base64编解码的另外几个版本
- TestNG 多线程测试
- Java ——变量类型
- 【SD系列】SAP 退货冲账过账成本更新