努力看了很久样例一直过不了。。。然后各种输出中间过程啊巴拉巴拉弄了1h,没办法了。。。然后突然想到啊原来的边可以用啊为什么不用。。。于是A了。。。感人肺腑

#include<cstdio>
#include<cstring>
#include<queue>
#include<iostream>
#include<algorithm>
using namespace std;
#define rep(i,n) for(int i=1;i<=n;i++)
#define qwq(x) for(edge *e=head[x];e;e=e->next)
#define clr(x,c) memset(x,c,sizeof(x))
#define REP(i,s,t) for(int i=s;i<=t;i++)
int read(){int x=0;char c=getchar();bool f=true;while(!isdigit(c)){if(c=='-') f=false;c=getchar();}while(isdigit(c)) x=x*10+c-'0',c=getchar();return f?x:-x;
}
const int nmax=1005;
const int maxn=20005;
const int inf=0x7f7f7f7f;
struct edge{int to,cap,cost;edge *next,*rev;
};
edge edges[maxn],*pt,*head[nmax],*cur[nmax],*p[nmax];
int u[maxn],v[maxn],w[maxn];
void add(int u,int v,int d,int w){pt->to=v;pt->cap=d;pt->cost=w;pt->next=head[u];head[u]=pt++;
}
void adde(int u,int v,int d,int w){add(u,v,d,w);add(v,u,0,-w);head[u]->rev=head[v];head[v]->rev=head[u];
}
bool inq[nmax];
int h[nmax],cnt[nmax],d[nmax],a[nmax];
int mincost(int s,int t){int cost=0;while(1){clr(inq,0);inq[s]=1;clr(d,0x7f);d[s]=0;a[s]=inf;queue<int>q;q.push(s);while(!q.empty()){int x=q.front();q.pop();inq[x]=0;//    printf("%d: %d\n",x,d[x])
;           qwq(x) if(e->cap>0&&d[e->to]>d[x]+e->cost){int to=e->to;d[to]=d[x]+e->cost;//  printf("tmd:%d\n",e->cost);a[to]=min(a[x],e->cap);p[to]=e;if(!inq[to]) q.push(to),inq[to]=1;}}if(d[t]==inf) break;cost+=d[t]*a[t];int x=t;while(x!=s) p[x]->cap-=a[t],p[x]->rev->cap+=a[t],x=p[x]->rev->to;//printf("%d %d\n",d[t],cost);}return cost;
}
int maxflow(int s,int t,int n){clr(cnt,0);cnt[0]=n;clr(h,0);int flow=0,a=inf,x=s;edge *e;while(h[s]<n){for(e=cur[x];e;e=e->next) if(e->cap>0&&h[e->to]+1==h[x]) break;if(e){a=min(a,e->cap);p[e->to]=cur[x]=e;x=e->to;if(x==t){while(x!=s) p[x]->cap-=a,p[x]->rev->cap+=a,x=p[x]->rev->to;flow+=a;a=inf;}}else{if(!--cnt[h[x]]) break;h[x]=n;for(e=head[x];e;e=e->next) if(e->cap>0&&h[x]>h[e->to]+1) cur[x]=e,h[x]=h[e->to]+1;cnt[h[x]]++;if(x!=s) x=p[x]->rev->to;}}return flow;
}
int main(){int n=read(),m=read(),k=read(),sa=1,ta=n,sb=0,tb=n+1,cap;pt=edges;clr(head,0);rep(i,m){u[i]=read(),v[i]=read(),cap=read(),w[i]=read();adde(u[i],v[i],cap,0);}/*rep(i,n) {qwq(i) printf("%d %d %d\n",e->to,e->cap,e->cost);printf("\n");}*/printf("%d ",maxflow(sa,ta,n));
//  pt=edges;clr(head,0);rep(i,m) adde(u[i],v[i],k,w[i]);adde(sb,sa,k,0);adde(ta,tb,k,0);
/*  REP(i,0,n) {qwq(i) printf("%d %d %d\n",e->to,e->cap,e->cost);printf("\n");}*/printf("%d\n",mincost(sb,tb));return 0;
}

 

1834: [ZJOI2010]network 网络扩容

Time Limit: 3 Sec  Memory Limit: 64 MB
Submit: 2628  Solved: 1333
[Submit][Status][Discuss]

Description

给定一张有向图,每条边都有一个容量C和一个扩容费用W。这里扩容费用是指将容量扩大1所需的费用。求: 1、 在不扩容的情况下,1到N的最大流; 2、 将1到N的最大流增加K所需的最小扩容费用。

Input

输入文件的第一行包含三个整数N,M,K,表示有向图的点数、边数以及所需要增加的流量。 接下来的M行每行包含四个整数u,v,C,W,表示一条从u到v,容量为C,扩容费用为W的边。

Output

输出文件一行包含两个整数,分别表示问题1和问题2的答案。

Sample Input

5 8 2
1 2 5 8
2 5 9 9
5 1 6 2
5 1 1 8
1 2 8 7
2 5 4 9
1 2 1 1
1 4 2 1

Sample Output

13 19
30%的数据中,N<=100
100%的数据中,N<=1000,M<=5000,K<=10

HINT

Source

Day1

[Submit][Status][Discuss]

转载于:https://www.cnblogs.com/fighting-to-the-end/p/5656835.html

bzoj1834: [ZJOI2010]network 网络扩容相关推荐

  1. [BZOJ1834][ZJOI2010]network 网络扩容 最大流+费用流

    1834: [ZJOI2010]network 网络扩容 Time Limit: 3 Sec  Memory Limit: 64 MB Submit: 3330  Solved: 1739 [Subm ...

  2. [bzoj1834][ZJOI2010]network 网络扩容

    来自FallDream的博客,未经允许,请勿转载,谢谢. 给定一张有向图,每条边都有一个容量C和一个扩容费用W.这里扩容费用是指将容量扩大1所需的费用.求: 1. 在不扩容的情况下,1到N的最大流: ...

  3. 2018.10.13 bzoj1834: [ZJOI2010]network 网络扩容(最大流+费用流)

    传送门 网络流水题啊. 第一问直接放心跑最大流(本来还以为有什么tricktricktrick). 第二问就直接把原来的边(u,v,c,w)(u,v,c,w)(u,v,c,w)变成(u,v,c,0)( ...

  4. [BZOJ1834][ZJOI2010]network 网络扩容(最大流+费用流)

    题目描述 传送门 题解 Q1 傻逼最大流 Q2 求出最大流之后将图暴力重构,原图中的边费用为0,流量为初始流量,添加一些和原图边同始同终的边,费用为扩容费用,流量为INF,再添加一个超级源连向原先的源 ...

  5. BZOJ1834 [ZJOI2010]network 网络扩容

    网络流训练好题...但是要给差评!蒟蒻表示这就是板子题,然后做了半个小时T T 先跑一边最大流,得到第一问答案ans. 第二问:原先的边不动,费用为0. 然后对每条边在上面再加一条边,流量为inf,费 ...

  6. [BZOJ 1834] [ZJOI2010]network 网络扩容

    1834: [ZJOI2010]network 网络扩容 Time Limit: 3 SecMemory Limit: 64 MB Description 给定一张有向图,每条边都有一个容量C和一个扩 ...

  7. 【BZOJ】1834: [ZJOI2010]network 网络扩容(最大流+费用流)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1834 我又思考人生了T_T,nd的数组开小了,一直wa,调了一个小时才发现啊!!!!!我一直以为我的 ...

  8. bzoj 1834: [ZJOI2010]network 网络扩容【最大流+最小费用最大流】

    第一问直接跑最大流即可.建图的时候按照费用流建,费用为0. 对于第二问,在第一问dinic剩下的残量网络上建图,对原图的每条边(i,j),建(i,j,inf,cij),表示可以用c的花费增广这条路.然 ...

  9. 2017.10.11 network 网络扩容 思考记录

    第一问是网络流. 第二问是费用流,但之前的边依然是可以用的,所以每个点决策:用原来的流量    购买一条流量,扫每条边加进去就可以了 然后限制流出为k 码: #include<iostream& ...

最新文章

  1. iOS如何转换十三位的时间戳
  2. B/S模式下如何使软件屏蔽系统热键
  3. 笔记-信息系统开发基础-面向对象基本概念-多态
  4. muduo学习笔记 线程类
  5. 前端学习(1168):构造函数方法(转换为真正数组)
  6. HBase regions分布不均匀的解决
  7. 2022年企业微信生态研究报告
  8. Origin 移动图像
  9. 计算机网络谢希仁第七版 第二章 课后答案
  10. 教你玩转ACDSEE
  11. 用户权限---u+s\g+s\o+t三个特殊权限说明
  12. 高斯投影坐标计算例题_测量学高斯投影已知横坐标如何求在第几度带投影计算而得的?例如:...-y坐标的自然值怎么算-数学-莫囤料同学...
  13. 电脑网页无法解析服务器dns,电脑无法解析服务器dns地址怎么办
  14. 数仓建设之IP库的匹配
  15. 筋斗云案例 - animate、transition都能实现
  16. (008)前端css,js,Jquery,Servlet入门
  17. 淘宝帝国是如何创建的连载03
  18. 【1024面试必备】厂长爆肝万字之多线程高并发JUC编程⭐建议收藏
  19. 【期末考试】计算机组成原理突击复习
  20. css整理 -- 右箭头,上下箭头,三角形

热门文章

  1. saxon java_如何将Saxon设置为Java中的Xslt处理器?
  2. php 定义数组使用逗号,
  3. java常用技术栈,HR的话扎心了
  4. 目标检测R-CNN模型的CNN模块微调过程分析【全网最易懂】
  5. 【Java Web开发指南】Maven+MyBatis实现增删改查的Demo
  6. 公共基础选择题前10t
  7. erwin连接oracle数据库,erwin连接oracle9i数据库
  8. java 正则 u2E80_java正则表达式中的POSIX 字符类和Unicode 块和类别的类介绍
  9. c# 指定打开某个路径下的CMD_(win10下sublime通过配置JSON调用MATLAB直接运行程序)(转载)...
  10. python星期计算_Python简单计算给定某一年的某一天是星期几示例