CF434D Nanami's Power Plant
就是切糕那道题,首先对每个函数连一串,然后\(x_u\leq x_v+d\)这个条件就是\(u\)函数\(i\)取值连向\(v\)函数\(i-d\)取值边权为inf,然后答案就是最小割了。
#include<bits/stdc++.h>
#define il inline//
#define vd void
typedef long long ll;
il int gi(){
    int x=0,f=1;
    char ch=getchar();
    while(!isdigit(ch)){
        if(ch=='-')f=-1;
        ch=getchar();
    }
    while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
    return x*f;
}
int a[51],b[51],c[51],l[51],r[51];
int num[51][202],cnt,S,T;
int fir[11000],head[10010],dep[10010],dis[10000010],nxt[10000010],id=1;
ll w[10000010];
il vd link(int a,int b,ll c){
    nxt[++id]=fir[a],fir[a]=id,dis[id]=b,w[id]=c;
    nxt[++id]=fir[b],fir[b]=id,dis[id]=a,w[id]=0;
}
il bool BFS(){
    static int que[11000],hd,tl;
    memset(dep,0,sizeof dep);
    hd=tl=0;que[tl++]=S;dep[S]=1;
    while(hd^tl){
        int x=que[hd++];
        for(int i=fir[x];i;i=nxt[i])
            if(!dep[dis[i]]&&w[i])
                dep[dis[i]]=dep[x]+1,que[tl++]=dis[i];
    }
    return dep[T];
}
il ll Dinic(int x,ll maxflow){
    if(x==T)return maxflow;
    ll ret=0;
    for(int&i=head[x];i;i=nxt[i])
        if(w[i]&&dep[dis[i]]==dep[x]+1){
            ll d=Dinic(dis[i],std::min(maxflow-ret,w[i]));
            w[i]-=d,w[i^1]+=d,ret+=d;
            if(ret==maxflow)break;
        }
     return ret;
}
int main(){
    int n=gi(),m=gi();S=++cnt,T=++cnt;
    for(int i=1;i<=n;++i)a[i]=gi(),b[i]=gi(),c[i]=gi();
    for(int i=1;i<=n;++i)l[i]=gi(),r[i]=gi();
    for(int i=1;i<=n;++i){
        for(int j=l[i];j<=r[i]+1;++j)num[i][j+100]=++cnt;
        link(S,num[i][l[i]+100],1e18);
        for(int j=l[i];j<=r[i];++j)link(num[i][j+100],num[i][j+101],(1<<25)-(a[i]*j*j+b[i]*j+c[i]));
        link(num[i][r[i]+101],T,1e18);
    }
    int u,v,d;
    while(m--){
        u=gi(),v=gi(),d=gi();
        for(int i=std::max(l[u]-d,l[v])+100;i<=std::min(r[u]-d,r[v])+101;++i)link(num[u][i+d],num[v][i],1e18);
    }
    ll ans=(1ll<<25)*n;
    while(BFS())memcpy(head,fir,sizeof head),ans-=Dinic(S,1e18);
    printf("%lld\n",ans);
    return 0;
}
CF434D Nanami's Power Plant的更多相关文章
- CF434D Nanami's Power Plant 最小割
		传送门 因为连距离限制的边的细节调了贼久QAQ 这个题和HNOI2013 切糕性质相同,都是有距离限制的最小割问题 对于每一个函数,用一条链记录变量\(x\)在不同取值下这个函数的贡献.对于一个\(x ... 
- 【CF434D】Nanami's Power Plant 最小割
		[CF434D]Nanami's Power Plant 题意:有n个二次函数$y=a_ix^2+b_ix+c_i$($a_i,b_i,c_i$是整数),第i个函数要求x的取值在$[l_i,r_i]$ ... 
- Codeforces Round #248 (Div. 1)  D - Nanami's Power Plant  最小割
		D - Nanami's Power Plant 思路:类似与bzoj切糕那道题的模型.. #include<bits/stdc++.h> #define LL long long #de ... 
- CodeForces - 434D Nanami's Power Plant
		Codeforces - 434D 题目大意: 给定一个长为n的序列,序列中的第i为上的值\(x_i\),序列第i位上的值\(x_i\in[l_i,r_i]\),价值为\(f_i(x_i)\),其中\ ... 
- 缩点:Power Plant;
		题目传送门:[UVALive 6437]Power Plant 题目大意:T组数据,给定一幅带权图(n, m), 然后给定k个点, 与图中存在有若干条边.每个点都要至少要和这k个点的一个点直接或间接相 ... 
- Nuclear Power Plant ZOJ - 3840 树形dp
		There are N (1 ≤ N ≤ 105) cities on land, and there are N - 1 wires connecting the cities. Therefore ... 
- UVA    Live 6437   Power Plant 最小生成树
		题意: 有许多油井和村庄什么的,让你使得这些村庄能连通一个油井就好了.第一行给你一个数字T代表有T组测试数据,第二行有 M , N , K ,M代表包括油井在内的村庄数,N 代表有N个 两两连通的地方 ... 
- LA 6437 Power Plant (prim最小生成树)
		还是裸的最小生成树 #include<bits/stdc++.h> using namespace std; int T,N,M,P,K,a,b,c; int dist[1020],m[1 ... 
- Codeforce 水题报告(2)
		又水了一发Codeforce ,这次继续发发题解顺便给自己PKUSC攒攒人品吧 CodeForces 438C:The Child and Polygon: 描述:给出一个多边形,求三角剖分的方案数( ... 
随机推荐
- Leetcode题解之Valid Palindrome II
			1.题目描述 2.问题分析 使用两个下标,检测下标对应的字符是否相等,若不相等,则考察子串. 3.代码 bool validPalindrome(string s) { , j = s.size()- ... 
- python常用模块之logging模块
			#日志级别 : noset debug info warning error critical #控制台默认的级别是warning的. import logging logging.basicConf ... 
- Sql server bulk insert
			Bulk Insert Sql server 的bulk insert语句可以高效的导入大数据量的平面文件(txt,csv文件)到数据库的一张表中,其用法如下: bulk insert test fr ... 
- MVC 上传下载
			在Asp.net的WEBform中,上传文件与下载文件处理是很简单的事情,如果转为ASP.NET MVC呢?那就没有那么容易了,难少少,也不是很难,一起来看下本文吧.本文主要讲如何在Asp.net M ... 
- 读高性能JavaScript编程 第四章 Duff's Device
			又要开始罗里吧嗦的 第四章 Summary 了. 这一次我尽量精简语言. 如果你认为 重复调用一个方法数次有点辣眼睛的话 比如: function test(i){ process(i++); pr ... 
- 笔记本键盘开关方法 仅限window系统
			按win键,搜索CMD(命令提示符).右键-以管理员身份运行.关闭笔记本键盘输入:sc config i8042prt start= disabled回车-重启电脑即可.需要重新启用键盘的话,输入:s ... 
- php 错误1
			Maximum execution time of 30 seconds exceeded 方法一,修改php.ini文件 max_execution_time = 30; Maximum execu ... 
- 洛谷P4053 [JSOI2007]建筑抢修
			放题解 题目传送门 放代码 #include <bits/stdc++.h>//万能头 #define MAXN 150000//最多的建筑数量(数据范围) using namespace ... 
- OpenCV——SURF特征检测、匹配与对象查找
			SURF原理详解:https://wenku.baidu.com/view/2f1e4d8ef705cc1754270945.html SURF算法工作原理 选择图像中的POI(Points of i ... 
- DDOS攻击详解
			导读 Ddos的攻击方式有很多种,最基本的Dos攻击就是利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服务的响应. 在信息安全的三要素——“保密性”.“完整性”和“可用性”中,DoS( ... 
