费用流做题记录

BZOJ1221:http://www.lydsy.com/JudgeOnline/problem.php?id=1221

  trick:将每天用完的,和要用的分来开处理,避免花费的重叠计算,也就是拆点

#include<bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:102400000,102400000")
#define ls i<<1
#define rs ls | 1
#define mid ((ll+rr)>>1)
#define pii pair<int,int>
#define MP make_pair
typedef long long LL;
const long long INF = 1e18+1LL;
const double Pi = acos(-1.0);
const int N = 4e5+10, M = 1e3+20, mod = 1e9+7,inf = 2e7;

int na[N],ans,ans1,S,T,head[N],cnt = 1,n,dis[N],q[N],inq[N],from[N],f,fA,fB;
struct {
    int from,to,next,c,v;
}e[N * 2];
void ins(int u,int v,int w,int c) {
    cnt++;
    e[cnt].from = u;
    e[cnt].to = v;
    e[cnt].v = w;
    e[cnt].c = c;
    e[cnt].next = head[u];
    head[u] = cnt;
}
void insert(int u,int v,int w,int c) {
    ins(u,v,w,c);ins(v,u,0,-c);
}
int spfa() {
    for(int i = 0; i <= T; ++i) dis[i] = inf;
    int t = 0,w = 1;
    dis[S] = q[S] = S;
    inq[S] = 1;
    while(t!=w) {
        int now = q[t++];
        if(t == 200001) t = 0;
        for(int i = head[now]; i; i = e[i].next) {
            if(e[i].v&&dis[e[i].to] > dis[now] + e[i].c)
            {
                from[e[i].to] = i;
                dis[e[i].to] = dis[now] + e[i].c;
                if(!inq[e[i].to]) {
                    inq[e[i].to] = 1;
                    q[w++] = e[i].to;
                    if(w == 200001) w = 0;
                }
            }
        }
        inq[now] = 0;
    }
    if(dis[T] >= inf) return 0;
    return 1;
}
void mcf() {
    int i = from[T],x=inf;
    while(i) {
        x = min(e[i].v,x);
        i = from[e[i].from];
    }
    i = from[T];
    ans1 = x;
    while(i) {
        e[i].v -= x;
        e[i^1].v += x;
        ans += e[i].c*x;
        i = from[e[i].from];
    }
}
int a,b;
int main()
{
    cnt = 1;
    memset(head,0,sizeof(head));
    scanf("%d%d%d%d%d%d",&n,&a,&b,&f,&fA,&fB);
    S = 0,T = 3*n;
    for(int i = 1; i <= n; ++i){
        scanf("%d",&na[i]);
        insert(S,i,inf,0);
        insert(S,i+n,inf,f);
        insert(i+n,T,na[i],0);
        if(i + 1 <= n)
            insert(i,i+1,inf,0);
        if(i + a + 1 <= n)
            insert(i,n+i+a+1,inf,fA);
        if(i + b + 1 <= n)
            insert(i,n+i+b+1,inf,fB);
    }
    ans = 0,ans1 = 0;
    while(spfa()) mcf();
    printf("%d\n",ans);
    return 0;
}

BZOJ1221

  

时间: 2024-10-25 00:57:11

费用流做题记录的相关文章

【BZOJ做题记录】07.07~?

在NOI一周前重开一个坑 最后更新时间:7.07 11:26 7.06 下午做的几道CQOI题: BZOJ1257: [CQOI2007]余数之和sum:把k mod i写成k-k/i*i然后分段求后面的部分就好了 BZOJ1258: [CQOI2007]三角形tri:在草稿纸上按照位置和边找一下规律就好了 BZOJ1260: [CQOI2007]涂色paint:简单的区间DP BZOJ1303: [CQOI2009]中位数图:小于中位数的改为-1大于的改为1,算一算前缀和然后哈希一下乘一乘就好

UVa 12534 Binary Matrix 2 zkw费用流模版题

题目链接:点击打开链接 思路: 我们首先假设这个图都是全0的 用n个点代表行,m个点代表列 用源点向行连一个值x 表示每行1的个数,向列连一个y表示每列y个1 则若行i和列j之间流过一个流量就表示 (i,j) 点填了1 那么若原来图中(i,j)点为0 则花费就是1 若原图中(i,j)点是1,则花费是-1 如此枚举x跑个费用流就好了 ==居然把我多年的白书费用流坑掉了... zkw走起啊 #include <stdio.h> #include <string.h> #include

POJ 3686 The Windy&#39;s(思维+费用流好题)

The Windy's Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 5362   Accepted: 2249 Description The Windy's is a world famous toy factory that owns M top-class workshop to make toys. This year the manager receives N orders for toys. The ma

HDU 3376 &amp;&amp; 2686 方格取数 最大和 费用流裸题

题意: 1.一个人从[1,1] ->[n,n] ->[1,1] 2.只能走最短路 3.走过的点不能再走 问最大和. 对每个点拆点限流为1即可满足3. 费用流流量为2满足1 最大费用流,先给图取负,结果再取负,满足2 #include <stdio.h> #include <string.h> #include <iostream> #include <math.h> #include <queue> #include <set&

project euler做题记录

ProjectEuler_做题记录 简单记录一下. problem 441 The inverse summation of coprime couples 神仙题.考虑答案为: \[\begin{array}{c} S(n) & = & \sum_{i = 1} ^ n \sum_{p = 1} ^ i \sum_{q = p + 1} ^ i \frac {1}{pq}[p + q \geq i][gcd(p, q) = 1] \& = & \sum_{i = 1} ^

退役前的做题记录5.0

退役前的做题记录5.0 出于某种原因新开了一篇. [CodeChef]Querying on a Grid 对序列建立分治结构,每次处理\((l,mid,r)\)时,以\(mid\)为源点建立最短路树,这样跨越\(mid\)的点对之间的最短路一定会经过\(mid\),因此两点之间的最短路径就可以描述成最短路树上的两段到根路径.对每棵最短路树处理\(dfs\)序,用树状数组维护权值修改即可. [Wannafly挑战赛4F]线路规划 类似SCOI2016萌萌哒一题,并查集\(f_{i,j}\)表示从

后缀自动机做题记录

目录 后缀自动机做题记录 sp1811 sp1812 sp10570 luogu 2463 CF873F TJOI2015 弦论 AHOI2013 差异 HEOI2016/TJOI2016 字符串 HAOI2016 找相同字符 SDOI2016 生成魔咒 ZJOI2015 诸神眷顾的幻想乡 留坑待填 广义SAM 其他 NOI原题练习 后缀自动机做题记录 来填之前的坑了...考后大概会做做有字符串的综合题吧 sp1811 lcs板子,对于第一个串建出SAM,第二个串在上面跑,即可求出对于每一个位置

清华集训2014 做题记录

清华集训2014做题记录 已完成 [清华集训2014]玛里苟斯 [清华集训2014]主旋律 [清华集训2014]奇数国 [清华集训2014]矩阵变换 [清华集训2014]sum [清华集训2014]虫逢 [清华集训2014]玄学 [清华集训2014]文学 未完成 [清华集训2014]卡常数 [清华集训2014]简单回路 [清华集训2014]Router [清华集训2014] Breaking Bomber 写一题要膜一题题解,膜完题解膜代码,膜完代码膜指导,膜了好几天了还有四个题没做. [清华集

2020年3月做题记录

[不定时更新,赶论文,赶项目,1月~2月做题记录还在整理,自我训练] 反转链表 链接:https://leetcode-cn.com/problems/reverse-linked-list/ 类名: 考察点:链表.迭代.递归 解题过程: 力扣3月每日1题,题解链接: https://leetcode-cn.com/problems/reverse-linked-list/solution/di-2ci-da-qia-lian-biao-fan-zhuan-di-gui-by-wu-xi-/ 就