【链接】点击打开链接


【题意】


在这里写题意

【题解】


先设一个超级源点,向每个片区都建一条边,容量为b,费用为-a;
然后从每个片区再连一条边,指向一个超级汇点.
容量为d,费用为c;
然后从起点到汇点跑一下最大费用流就好.
(把spfa的最短路改成最长路就是最大费用流了);
这个费用流,在求只会出现正数的费用的时候是不用考虑那么多的.
显然我们这里是有负数的
所以有可能到了某个时刻,增广路得到的费用为负数,这个时候,我们就不能继续按照这条路卖东西了.
这意味着我们继续走的话,会亏本.
所以虽然还没得到最大流,也应该停手了.
只能按照之前的方案得到最大利润了,不能再继续做增广路了。
也就是说,有一些题目,在得到最大流之前,就可能已经得到最优的方案了.
(有负数的情况下);

【错的次数】


1

【反思】


边的个数一定要看清楚啊。
要记得你加了双向边。

【代码】

#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define ms(x,y) memset(x,y,sizeof x)
#define ri(x) scanf("%d",&x)
#define rl(x) scanf("%lld",&x)
#define rs(x) scanf("%s",x)
#define oi(x) printf("%d",x)
#define ol(x) printf("%lld",x)
#define oc putchar(' ')
#define os(x) printf(x)
#define all(x) x.begin(),x.end()
#define Open() freopen("F:\\rush.txt","r",stdin)
#define Close() ios::sync_with_stdio(0) typedef pair<int,int> pii;
typedef pair<LL,LL> pll; const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int N = 500;
const int NN = 1000 + 4000;
const int INF = 0x3f3f3f3f; struct abc{
    int from,en,flow,nex,cost;
}; int n,m,totm,fir[N+50],dis[N+50],pre[N+50],mi[N+50],ans;
abc bian[NN+100];
bool inq[N+50];
queue <int> dl; void add(int x,int y,int flow,int cost){
    bian[totm].nex = fir[x];
    fir[x] = totm;
    bian[totm].from = x;
    bian[totm].en = y;
    bian[totm].cost = cost;
    bian[totm].flow = flow;
    totm++;     bian[totm].nex = fir[y];
    fir[y] = totm;
    bian[totm].from = y;
    bian[totm].en = x;
    bian[totm].cost = -cost;
    bian[totm].flow = 0;
    totm++;
} bool spfa(int s,int t){
    ms(dis,-INF),ms(inq,0),ms(mi,INF);
    dis[s] = 0,inq[s] = 1;
    dl.push(s);
    pre[t] = -1;
    while (!dl.empty()){
        int x = dl.front();
        inq[x] = false;
        dl.pop();
        for (int i = fir[x];i!=-1;i = bian[i].nex){
            int y = bian[i].en;
            if (bian[i].flow && dis[y] < dis[x] + bian[i].cost){
                dis[y] = dis[x] + bian[i].cost;
                mi[y] = min(bian[i].flow,mi[x]);
                pre[y] = i;
                if (!inq[y]){
                    inq[y] = true;
                    dl.push(y);
                }
            }
        }
    }
    if (dis[t] < 0) return false;
    int now = t;
    while (now != s){
        int temp = pre[now];
        bian[temp].flow -= mi[t];
        bian[temp^1].flow += mi[t];
        now = bian[temp].from;
    }
    ans += dis[t]*mi[t];
    return true;
} int main(){
    //Open();
    //Close();
    while (~ri(n)){
        ri(m);
        ans = 0;
        totm = 0;
        ms(fir,255);
        rep1(i,1,n){
            int a,b,c,d;
            ri(a),ri(b),ri(c),ri(d);
            add(0,i,b,-a);
            add(i,n+1,d,c);
        }
        rep1(i,1,m){
            int x,y,k;
            ri(x),ri(y),ri(k);
            add(x,y,INF,-k);
            add(y,x,INF,-k);
        }
        while (spfa(0,n+1));
        oi(ans);puts("");
    }
    return 0;
}

【2017"百度之星"程序设计大赛 - 初赛(B)】度度熊的交易计划的更多相关文章

  1. 2017"百度之星"程序设计大赛 - 资格赛 1002 度度熊的王国战略

    全局最小割 Stoer-Wagner (SW算法)优化 优化吃藕了,感谢放宽时限,感谢平板电视 (pb_ds) #include <iostream> #include <cstdi ...

  2. HDU 6118 度度熊的交易计划 【最小费用最大流】 (2017"百度之星"程序设计大赛 - 初赛(B))

    度度熊的交易计划 Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  3. HDU 6119 小小粉丝度度熊 【预处理+尺取法】(2017"百度之星"程序设计大赛 - 初赛(B))

    小小粉丝度度熊 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  4. HDU 6114 Chess 【组合数】(2017"百度之星"程序设计大赛 - 初赛(B))

    Chess Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  5. HDU 6109 数据分割 【并查集+set】 (2017"百度之星"程序设计大赛 - 初赛(A))

    数据分割 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  6. HDU 6108 小C的倍数问题 【数学】 (2017"百度之星"程序设计大赛 - 初赛(A))

    小C的倍数问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  7. HDU 6122 今夕何夕 【数学公式】 (2017"百度之星"程序设计大赛 - 初赛(A))

    今夕何夕 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  8. HDU 6113 度度熊的01世界 【DFS】(2017"百度之星"程序设计大赛 - 初赛(A))

    度度熊的01世界 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  9. 2017"百度之星"程序设计大赛 - 初赛(A) [ hdu 6108 小C的倍数问题 ] [ hdu 6109 数据分割 ] [ hdu 6110 路径交 ] [ hdu 6112 今夕何夕 ] [ hdu 6113 度度熊的01世界 ]

    这套题体验极差. PROBLEM 1001 - 小C的倍数问题 题 OvO http://acm.hdu.edu.cn/showproblem.php?pid=6108 (2017"百度之星 ...

  10. [SinGuLaRiTy] 2017 百度之星程序设计大赛 初赛B

    [SinGuLaRiTy-1037] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. Chess Time Limit: 2000/1000 ...

随机推荐

  1. Gonet2 游戏server框架解析之gRPC提高(5)

    上一篇blog是关于gRPC框架的基本使用,假设说gRPC仅仅是远程发几个參数,那和一个普通的http请求也没多大区别了. 所以今天我就来学习一下gRPC高级一点的用法. 流! 流能够依据用法,分为单 ...

  2. 123.static静态函数与类模板

    #include <iostream> using namespace std; //静态函数没有this指针,无需创建对象就可以直接调用 template<class T> ...

  3. .net数字转换成汉字大写

    public class Num2Rmb { private String[] hanArr={"零","壹","贰","叁&qu ...

  4. BZOJ 1503 treap

    思路: treap (算是基本操作吧-..) 加减的操作数很少 就暴力好啦 每回判断一下最小的数是不是比M小 如果是 就删,继续判断 搞定. //By SiriusRen #include <c ...

  5. 实时监控Cat之旅~分布式消息树的实现原理与测试

    大众点评的老吴在InfoQ上讲了Cat之后,有不少同仁开始关注这个实时监控系统,但学习的文章甚少,在GitHub上也是一言代过,给我们这些开发人员留下了N多个疑问,一时间不知道去哪里问,向谁去问了,通 ...

  6. Day2代码

    #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #defi ...

  7. WebAssembly学习(五):AssemblyScript - Hello World

    一.项目创建 1.创建AssemblyScript根目录 mkdir AssemblyScript 2.安装AssemblyScript开发依赖 cnpm install --save-dev Ass ...

  8. rman 备份并异机恢复

    1.RMAN 备份脚本 RUN { CONFIGURE RETENTION POLICY DAYS; CONFIGURE CONTROLFILE AUTOBACKUP ON; CONFIGURE CO ...

  9. iOS基本UI控件总结

    包括以下几类: //继承自NSObject:(暂列为控件) UIColor *_color;    //颜色 UIImage *_image;    //图像 //继承自UIView:只能相应手势UI ...

  10. 洛谷 P1889 士兵站队

    P1889 士兵站队 题目描述 在一个划分成网格的操场上, n个士兵散乱地站在网格点上.由整数 坐标 (x,y) 表示.士兵们可以沿网格边上.下左右移动一步,但在同时刻任一网格点上只能有名士兵.按照军 ...