CF903G Yet Another Maxflow Problem
考虑最大流=最小割
不妨把a到a的边称为a类边,b到b的称为b类边,a到b的称为c类边。
显然,答案一定是由最多1条a和最多一条b以及一些c组成的。
只有a是会变的,也就是说每个a对应了唯一的最优的b和c。
因此可以先求一下每个a对应的最优的b和c。
分析一下可得,a,b确定后,c应该是所有满足x<a,y>b的边组成的集合。
这个二维偏序显然排序加线段树就解决了。
然后变成n个数字,支持修改某个数字,维护最小值,一个set就好了。
#include<iostream>
#include<cctype>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<ctime>
#include<set>
#include<cstdlib>
#include<algorithm>
#define N 1100000
#define L 1000000
#define eps 1e-7
#define inf 1e15+7
#define db double
#define ll long long
#define ldb long double
using namespace std;
inline ll read()
{
char ch=0;
ll x=0,flag=1;
while(!isdigit(ch)){ch=getchar();if(ch=='-')flag=-1;}
while(isdigit(ch)){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
return x*flag;
}
struct lnk{ll x,y,z;}p[N];
bool cmp(lnk a,lnk b){return a.x<b.x;}
ll a[N],b[N],f[N];
struct Segment_Tree
{
#define lson o<<1
#define rson o<<1|1
#define mid ((l+r)>>1)
ll minv[N*4],addv[N*4];
inline void pushup(ll o){minv[o]=min(minv[lson],minv[rson]);}
inline void pushdown(ll o)
{
minv[lson]+=addv[o];minv[rson]+=addv[o];
addv[lson]+=addv[o];addv[rson]+=addv[o];
addv[o]=0;
}
void optadd(ll o,ll l,ll r,ll ql,ll qr,ll num)
{
if(ql<=l&&r<=qr){minv[o]+=num;addv[o]+=num;return;}
pushdown(o);
if(ql<=mid)optadd(lson,l,mid,ql,qr,num);
if(qr>mid)optadd(rson,mid+1,r,ql,qr,num);
pushup(o);
}
ll query(){return minv[1];}
}T;
multiset<ll>S;
int main()
{
ll n=read(),m=read(),q=read();
T.optadd(1,0,n,n,n,inf);
for(ll i=1;i<n;i++)a[i]=read(),b[i]=read(),T.optadd(1,0,n,i,i,b[i]);
for(ll i=1;i<=m;i++)p[i].x=read(),p[i].y=read(),p[i].z=read();
sort(p+1,p+m+1,cmp);
for(ll i=1,j=0;i<=n;i++)
{
while(j<m&&p[j+1].x<=i)j++,T.optadd(1,0,n,0,p[j].y-1,p[j].z);
f[i]=T.query();S.insert(a[i]+f[i]);
}
printf("%lld\n",*(S.begin()));
for(ll i=1;i<=q;i++)
{
ll x=read(),y=read();
S.erase(S.find(a[x]+f[x]));
a[x]=y;S.insert(a[x]+f[x]);
printf("%lld\n",*(S.begin()));
}
return 0;
}
CF903G Yet Another Maxflow Problem的更多相关文章
- 【CF903G】Yet Another Maxflow Problem 线段树
[CF903G]Yet Another Maxflow Problem 题意:一张图分为两部分,左边有n个点A,右边有m个点B,所有Ai->Ai+1有边,所有Bi->Bi+1有边,某些Ai ...
- Codeforces 903G Yet Another Maxflow Problem - 线段树
题目传送门 传送门I 传送门II 传送门III 题目大意 给定一个网络.网络分为$A$,$B$两个部分,每边各有$n$个点.对于$A_{i} \ (1\leqslant i < n)$会向$A_ ...
- Yet Another Maxflow Problem CodeForces - 903G (最小割,线段树)
大意: 两个n元素集合$A$, $B$, $A_i$与$A_{i+1}$连一条有向边, $B_i$与$B_{i+1}$连一条有向边, 给定$m$条从$A_i$连向$B_j$的有向边, 每次询问修改$A ...
- CodeForces903G Yet Another Maxflow Problem 扫描线 + 线段树 + 最小割
给定两条链\(A, B\),其中\(A\)链某些点向\(B\)链有连边,支持修改\(A\)链中的某条边权以及查询\(A_1\)到\(B_n\)的最大流 显而易见,\(A\)和\(B\)链中一定满足左部 ...
- Noip前的大抱佛脚----赛前任务
赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...
- 线段树 by yyb
线段树 by yyb Type1 维护特殊信息 1.[洛谷1438]无聊的数列 维护一个数列,两种操作 1.给一段区间加上一个等差数列 2.单点询问值 维护等差数列 不难发现,等差数列可以写成\(ad ...
- Educational Codeforces Round 34
F - Clear The Matrix 分析 题目问将所有星变成点的花费,限制了行数(只有4行),就可以往状压DP上去靠了. \(dp[i][j]\) 表示到第 \(i\) 列时状态为 \(j\) ...
- [转载]Maximum Flow: Augmenting Path Algorithms Comparison
https://www.topcoder.com/community/data-science/data-science-tutorials/maximum-flow-augmenting-path- ...
- Maximum Flow and Minimum Cut
最大流最小割 Introduction Mincut Problem 最小割问题,输入是带权有向图,有一个源点 s(source)和一个汇点 t(target),边的权重在这里称作容量(capacit ...
随机推荐
- tp剩余未验证内容-4
关于pop-up被blocked的问题 首先 这个pop-up的功能叫 popup blocker , 它是浏览器(包括ff, chrome等) 自身 所内置 的一个功能, 不是 安装的外部 插件/或 ...
- dp小结|背包问题
1.先放上0-1背包模板 二维数组 for(int i=1;i<=n;i++)//枚举 物品 for(int j=1;j<=V;j++)//枚举体积 //这个位置是可以正序枚举的. qwq ...
- Sorting arrays in NumPy by column
https://stackoverflow.com/questions/2828059/sorting-arrays-in-numpy-by-column I suppose this works: ...
- IDEA 入门
IDEA初步使用 IntelliJ IDEA 使用教程(2019图文版) -- 从入门到上瘾 IntelliJ IDEA 设置代码提示或自动补全的快捷键 (Alt+/) IntelliJ IDEA 配 ...
- CF981D Bookshelves
按位贪心+DP的好题qwq 首先看到题目的要求,统计价值的时候的操作是按位与,就要有按位分别计算的意识 开始没意识到结果想了好久还是看了题解才想到 由于统计价值的方式不是加和,所以可能会出现两个较大的 ...
- memset()函数用法及其作用
memset()函数原型是: extern void *memset(void *buffer, int c, int count) //buffer:为指针或是数组, //c:是赋给buffer的值 ...
- 【Python】yield
彻底理解Python中的yield 2017年04月21日 17:49:57 阅读数:19733 阅读别人的python源码时碰到了这个yield这个关键字,各种搜索终于搞懂了,在此做一下总结: 通常 ...
- QQ帐户的申请与登陆-(字符串操作)
题目: 实现QQ新帐户申请和老帐户登陆的简化版功能.最大挑战是:据说现在的QQ号码已经有10位数了. 输入格式: 输入首先给出一个正整数N(≤10^5),随后给出N行指令.每行指令的格式为:“命令符( ...
- CIKM 18 | 蚂蚁金服论文:基于异构图神经网络的恶意账户识别方法
小蚂蚁说: ACM CIKM 2018 全称是 The 27th ACM International Conference on Information and Knowledge Managemen ...
- Eclipse使用之将Git项目转为Maven项目, ( 注意: 最后没有pom.xml文件的, 要转化下 )
Eclipse使用之将Git项目转为Maven项目(全图解) 2017年08月11日 09:24:31 阅读数:427 1.打开Eclipse,File->Import 2.Git->Pr ...