题目链接

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]费用流的更多相关文章

  1. Luogu P3305 [SDOI2013]费用流 二分 网络流

    题目链接 \(Click\) \(Here\) 非常有趣的一个题目. 关键结论:所有的单位费用应该被分配在流量最大的边上. 即:在保证最大流的前提下,使最大流量最小.这里我们采用二分的方法,每次判断让 ...

  2. P3305 [SDOI2013]费用流

    题目描述 Alice和Bob在图论课程上学习了最大流和最小费用最大流的相关知识. 最大流问题:给定一张有向图表示运输网络,一个源点S和一个汇点T,每条边都有最大流量. 一个合法的网络流方案必须满足: ...

  3. BZOJ3130: [Sdoi2013]费用流[最大流 实数二分]

    3130: [Sdoi2013]费用流 Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 960  Solved: 5 ...

  4. bzoj千题计划133:bzoj3130: [Sdoi2013]费用流

    http://www.lydsy.com/JudgeOnline/problem.php?id=3130 第一问就是个最大流 第二问: Bob希望总费用尽量大,那肯定是把所有的花费加到流量最大的那一条 ...

  5. BZOJ 3130: [Sdoi2013]费用流 网络流+二分

    3130: [Sdoi2013]费用流 Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 1230  Solved: ...

  6. BZOJ 3130: [Sdoi2013]费用流 网络流 二分 最大流

    https://www.lydsy.com/JudgeOnline/problem.php?id=3130 本来找费用流的题,权当复习一下网络流好了. 有点麻烦的是double,干脆判断大小或者二分增 ...

  7. BZOJ3130 [Sdoi2013]费用流

    AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=3130 这题codevs上也有,不过数据挂了[要A得看discuss]. 题目大意: Ali ...

  8. bzoj 3130 [Sdoi2013]费用流(二分,最大流)

    Description Alice和Bob在图论课程上学习了最大流和最小费用最大流的相关知识.    最大流问题:给定一张有向图表示运输网络,一个源点S和一个汇点T,每条边都有最大流量.一个合法的网络 ...

  9. [SDOI2013]费用流

    然而这是一道网络流... 如果满足Bob,使总费用最大: 设最大流的每条边流量(不是容量)为w[i],分配到每条边的费用为p[i],最大流量为wmax,p[i]的和为P 那么显然w[i] * p[i] ...

随机推荐

  1. 洛谷 P2486 [SDOI2011]染色/bzoj 2243: [SDOI2011]染色 解题报告

    [SDOI2011]染色 题目描述 给定一棵有n个节点的无根树和m个操作,操作有2类: 1.将节点a到节点b路径上所有点都染成颜色c: 2.询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同 ...

  2. Educational Codeforces Round 11 A

    A. Co-prime Array time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  3. springboot中 后端跨域的实现配置

    在springboot的启动文件中,添加此内容,可以允许跨域

  4. netty入门代码学习

    服务端代码: package com.lsp.netty; /** * @author lishupeng * @create 2017-05-27 下午 3:48 **/ import io.net ...

  5. 九大排序算法Java实现

    之前学习数据结构与算法时花了三天时间整理九大排序算法,并采用Java语言来实现,今天第一次写博客,刚好可以把这些东西从总结的文档中拿出来与大家分享一下,同时作为自己以后的备忘录. 1.排序算法时间复杂 ...

  6. 我在一个前端项目中用js整理的一些通用方法,其中使用到的思想,主要就是约定了。

    把名称和后台来的json数据约定起来,可以达到的效果就是可以将东西统一化,减少差异,提升模块等的通用性,此后就可以实现具体不同模块内容可以自动或拷贝赋值的方式 2016.7.18 refactor s ...

  7. Codeforces Round #469 Div. 2 A B C D E

    A. Left-handers, Right-handers and Ambidexters 题意 \(l\)个左撇子,\(r\)个右撇子,\(a\)个两手均可.要组成一支队伍,里面用左手的人数与用右 ...

  8. camera摄像原理之二:色彩空间【转】

    转自:http://blog.csdn.net/ghostyu/article/details/7912854 对于sensor 来说,我们经常接触到的色彩空间的概念,主要是RGB , YUV这两种( ...

  9. Entity Framework 6.1.2 offset row fetch next 错误解决办法

    本地测试环境用的SqlServer2012,生产环境2008R2.然后在查询分页数据时生产环境悲剧的报错了. 原因是EF6.1.2以上版本在编译SQL时使用了新的语法对低版本的SqlServer不兼容 ...

  10. 【计算机网络】http中get和post的区别

    常见回答: 1. GET使用URL或Cookie传参.而POST将数据放在BODY中. 2. GET的URL会有长度上的限制,则POST的数据则可以非常大. 3. POST比GET安全,因为数据在地址 ...