luogu P3305 [SDOI2013]费用流
题目链接
bz似乎挂了...
luogu P3305 [SDOI2013]费用流
题解
dalao告诉我,这题
似乎很水....
懂了题目大意就可以随便切了
问1,最大流
问2,二分最大边权求,check是否为最大流
PS:今天代码很多bug....惨orz
代码
#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define INF 0x7fffffff
#define eps 1e-4
const int maxn = 5007;
using std::queue;
using std::min;
int n,m,S,T;
inline int read() {
int x = 0,f = 1;
char c = getchar();
while(c < '0' || c > '9') {if(f == '-') f = -1;c = getchar();}
while(c <= '9'&&c >= '0') x = x * 10 + c - '0',c = getchar();
return x*f;
}
struct node{
int v;double flow;int next;
}edge[maxn<<2];
int head[maxn],num=1;
inline void add_edge(int u,int v,double flow) { edge[++num].v = v;edge[num].flow = flow;edge[num].next = head[u];head[u] = num; }
inline void ADD (int u,int v,double flow) {
add_edge(u,v,flow);
add_edge(v,u,0);
}
int a[maxn],b[maxn];double c[maxn];int lev[maxn],cur[maxn];
bool bfs() {
for(int i = 0;i <= n;++ i) lev[i] = -1,cur[i] = head[i];
queue<int>q;q.push(S),lev[S] = 0;
while(!q.empty()) {
int u = q.front();q.pop();
for(int i = head[u];i;i = edge[i].next) {
int v = edge[i].v;
if(lev[v] == -1&&edge[i].flow > 0)
lev[v] = lev[u]+1,q.push(v);
}
}
if(lev[T] != -1)return true;
return false;
}
double dfs(int x,double flow) {
if(x == T)return flow;
double delta,rest = 0;
for(int v,&i = cur[x];i;i = edge[i].next) {
v = edge[i].v;
if(lev[v] == lev[x]+1&&edge[i].flow > 0) {
delta = dfs(v,std::min(flow - rest,edge[i].flow));
if(delta) {
edge[i].flow -= delta;
edge[i^1].flow += delta;
rest+=delta;if(rest == delta)break;
}
}
}
if(rest==flow) lev[x]=-1;
return rest;
}
double Dinic() {
double ret = 0;
while(bfs())
ret += dfs(S,INF);
return ret;
}
void rebuild(double mid) {
memset(head,0,sizeof head);
num=1;
for(int i = 1;i <= m;++ i) {
ADD(a[i],b[i],min(mid,c[i]));
}
}
int main() {
double p;
n = read(),m = read(),scanf("%lf",&p);
S=1;T=n;
for (int i = 1;i <= m;++ i) scanf("%d%d%lf",&a[i],&b[i],&c[i]), ADD(a[i],b[i],c[i]);
double Max_flow;
Max_flow = Dinic();
printf("%.0lf\n",Max_flow);
double l = 0,r = 1000000086.0;
while (r - l > eps) {
double mid = (l + r) / 2;
rebuild(mid);
if(Dinic() != Max_flow) l = mid;
else r = mid;
}
printf("%.4lf\n",l*p);
return 0;
}
luogu P3305 [SDOI2013]费用流的更多相关文章
- Luogu P3305 [SDOI2013]费用流 二分 网络流
题目链接 \(Click\) \(Here\) 非常有趣的一个题目. 关键结论:所有的单位费用应该被分配在流量最大的边上. 即:在保证最大流的前提下,使最大流量最小.这里我们采用二分的方法,每次判断让 ...
- P3305 [SDOI2013]费用流
题目描述 Alice和Bob在图论课程上学习了最大流和最小费用最大流的相关知识. 最大流问题:给定一张有向图表示运输网络,一个源点S和一个汇点T,每条边都有最大流量. 一个合法的网络流方案必须满足: ...
- BZOJ3130: [Sdoi2013]费用流[最大流 实数二分]
3130: [Sdoi2013]费用流 Time Limit: 10 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 960 Solved: 5 ...
- bzoj千题计划133:bzoj3130: [Sdoi2013]费用流
http://www.lydsy.com/JudgeOnline/problem.php?id=3130 第一问就是个最大流 第二问: Bob希望总费用尽量大,那肯定是把所有的花费加到流量最大的那一条 ...
- BZOJ 3130: [Sdoi2013]费用流 网络流+二分
3130: [Sdoi2013]费用流 Time Limit: 10 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 1230 Solved: ...
- BZOJ 3130: [Sdoi2013]费用流 网络流 二分 最大流
https://www.lydsy.com/JudgeOnline/problem.php?id=3130 本来找费用流的题,权当复习一下网络流好了. 有点麻烦的是double,干脆判断大小或者二分增 ...
- BZOJ3130 [Sdoi2013]费用流
AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=3130 这题codevs上也有,不过数据挂了[要A得看discuss]. 题目大意: Ali ...
- bzoj 3130 [Sdoi2013]费用流(二分,最大流)
Description Alice和Bob在图论课程上学习了最大流和最小费用最大流的相关知识. 最大流问题:给定一张有向图表示运输网络,一个源点S和一个汇点T,每条边都有最大流量.一个合法的网络 ...
- [SDOI2013]费用流
然而这是一道网络流... 如果满足Bob,使总费用最大: 设最大流的每条边流量(不是容量)为w[i],分配到每条边的费用为p[i],最大流量为wmax,p[i]的和为P 那么显然w[i] * p[i] ...
随机推荐
- [POI2008] Poc (原名 Trians) Treap+Hash
这个题和千山鸟飞绝体现出了一种用平衡树解决动态集合问题,主要套路就是蜜汁标记. 这个题我一开始用替罪羊树搞了一下对了28个点,后来我换成了Treap一搞对了14个点,再后来发现被卡了Hash我竟然在自 ...
- jsonArray与jsonObject
最近两个星期接触最多的就是json和map了. 之前用到的json,就是一个键对应一个值,超级简单的一对一关系.现在用到的json那可以层层嵌套啊,刚开始接触的时候,确实有种崩溃的赶脚,不想去理,取个 ...
- linux内存条排查
已发现2个内存错误,应用名称(kernel:),日志内容(hangzhou-jishuan-DDS0248 kernel: sbridge: HANDLING MCE MEMORY ERROR han ...
- VS2010 VC Project的default Include设置
在IDE中,打开View->Other Windows->Property Manager.展开树形后,你会发现一个名为“Microsoft.Cpp.Win32.user”的项目(如下图) ...
- linux+GraphicsMagick 安装
转摘自:http://blog.csdn.net/fhqsse220/article/details/12995763 GraphicsMagick 安装 下载软件:download:ftp://ft ...
- 利用java.lang.reflect.Constructor动态实例化对象
} } } } } Student t = co ...
- mysql5.7.11安装遇到的问题
首次安装mysql5.7.11绿色版,真是破费功夫,现记录安装中遇到的问题,只是解决了问题,而不清楚问题的由来. 问题一: 问题二: 问题三: 问题四: 我的my.ini配置文件: [mysql] # ...
- 斜率优化DP讲解
对于斜率优化的DP转移方程,一般以w[i]=max(w[j]+(sum[i]-sum[j])*v)的1D1D形式为主,直观看来就是前j个为若干个阶段,第j+1到第i个为一个阶段,每个阶段有自己的代价或 ...
- EL表达式中获取list长度(JSTL函数用法)
在jsp页面中不能通过${list.size}取列表长度,而是 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" pref ...
- android 调试 native 程序的方法
一.背景 首先说需求,这个需求非常常见,就是android上需要的一个功能,linux已经有开源代码而且非常稳定,希望能直接porting过去使用,这个程序是pure c 的代码,也就是说,跟andr ...