P3288-[SCOI2014]方伯伯运椰子【0/1分数规划,负环】

正题

题目链接:https://www.luogu.com.cn/problem/P3288


题目大意

给出nnn个点mmm条边的一张图,没条边iii流量为cic_ici,费用是did_idi,然后缩小一个流量费用是aia_iai,增加一个流量费用是bib_ibi

要求改动图之后最大流不减少

假设减少的费用是ΔX\Delta XΔX,改动次数是kkk,求最大化ΔXk\frac{\Delta X}{k}kΔX

1≤n≤5000,1≤m≤30001\leq n\leq 5000,1\leq m\leq 30001n5000,1m3000


解题思路

因为最大流不减少,那么显然因为初始边,最大流也不能增加,所以,每次肯定是选一条回路增流或者退流,这样就是把增流的丢到环上退流的去。

然后对于一条边增流的费用就是ai−dia_i-d_iaidi,退流的费用是bi+dib_i+d_ibi+di

然后最大化的那个显然是一个分数规划,就直接二分答案然后边权加上答案看有没有负环就好了。


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int N=5e3+10;
struct node{int to,next;double w;
}a[N<<1];
int n,m,tot,ls[N],cnt[N];
double f[N];bool v[N];queue<int> q;
void addl(int x,int y,double w){a[++tot].to=y;a[tot].next=ls[x];a[tot].w=w;ls[x]=tot;return;
}
bool SPFA(double w){for(int i=1;i<=n+2;i++)f[i]=1e100,cnt[i]=0;q.push(n+1);f[n+1]=cnt[n+1]=0;while(!q.empty()){int x=q.front();q.pop();v[x]=0;for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(f[x]+a[i].w+w<f[y]){f[y]=f[x]+a[i].w+w;cnt[y]=cnt[x]+1;if(cnt[y]>=n&&a[i].w<0)return 1;if(!v[y])q.push(y),v[y]=1;}}}return 0;
}
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){int x,y;double A,B,C,D;scanf("%d%d",&x,&y);scanf("%lf%lf%lf%lf",&A,&B,&C,&D);
//		if(x==n+1)A=0,B=0,D=0;if(C>0)addl(y,x,A-D);addl(x,y,B+D);}double l=0,r=1e8;for(int i=1;i<=100;i++){double mid=(l+r)/2.0;if(SPFA(mid))l=mid; else r=mid;}printf("%.2lf\n",(l+r)/2.0);return 0; 
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/318730.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不止代码:ybtoj-消除木块(区间DP)

题目描述 n个木块排成一列&#xff0c;每个木块都有一个颜色。 每次&#xff0c;你都可以点击一个木块&#xff0c;这样被点击的木块以及和它相邻并且同色的木块就会消除。 如果一次性消除了k个木块&#xff0c;那么就会得到k*k分。 给定你一个游戏初始状态&#xff0c;请你…

.NET Core实战项目之CMS 第六章 入门篇-Vue的快速入门及其使用

写在前面上面文章我给大家介绍了Dapper这个ORM框架的简单使用&#xff0c;大伙会用了嘛&#xff01;本来今天这篇文章是要讲Vue的快速入门的&#xff0c;原因是想在后面的文章中使用Vue进行这个CMS系统的后台管理界面的实现。但是奈何Vue实现的SPA有一定的门槛&#xff0c;不太…

牛客练习赛10 F-序列查询(莫队+链表)

F-序列查询 v5zsq题解 假设数字xxx在区间[l,r]种出现y次&#xff0c;那么包含x的子区间个数为2r−l1−y⋅(2y−1)2^{r-l1-y}(2^y-1)2r−l1−y⋅(2y−1)&#xff0c;因此对询问贡献是x⋅2r−l1−y⋅(2y−1)x[2r−l1−2r−l1−y]x2^{r-l1-y}(2^y-1)x[2^{r-l1}-2^{r-l1-y}]x⋅2r…

牛客题霸 [有关阶乘的两个问题1] C++题解/答案

牛客题霸 [有关阶乘的两个问题1] C题解/答案 题目描述 给定一个非负整数N&#xff0c;返回N!结果的末尾为0的数量 题解&#xff1a; 这个题有技巧 102*5,也就是说有一对2和5就会贡献一个0&#xff0c;但是2的数量远远大于5&#xff0c;所以只用统计五即可 代码&#xff1a…

不止代码:ybtoj-棋盘分割(二维区间dp)

题目描述 将一个8*8的棋盘进行如下分割&#xff1a;将原棋盘割下一块矩形棋盘并使剩下部分也是矩形&#xff0c;再将剩下的部分继续如此分割&#xff0c;这样割了n-1次后&#xff0c;连同最后剩下的矩形棋盘共有n块矩形棋盘。 (每次切割都只能沿着棋盘格子的边进行) 原棋盘上…

P7717-「EZEC-10」序列【Trie】

正题 题目链接:https://www.luogu.com.cn/problem/P7717 题目大意 求有多少个长度为nnn的序列aaa满足&#xff0c;都在[0,k][0,k][0,k]的范围内且满足mmm个限制刑如&#xff1a;axxorayza_x\ xor\ a_yzax​ xor ay​z 0≤n,m≤5105,0≤k<2300\leq n,m\leq 5\times 10^5,0\…

ASP.NET Core MVC 授权的扩展:自定义 Authorize 和 IApplicationModelProvide

一、概述ASP.NET Core MVC 提供了基于角色( Role )、声明( Chaim ) 和策略 ( Policy ) 等的授权方式。在实际应用中&#xff0c;可能采用部门&#xff08; Department , 本文采用用户组 Group &#xff09;、职位 ( 可继续沿用 Role )、权限( Permission )的方式进行授权。要达…

牛客题霸 [分糖果问题] C++题解/答案

牛客题霸 [分糖果问题] C题解/答案 题目描述 一群孩子做游戏&#xff0c;现在请你根据游戏得分来发糖果&#xff0c;要求如下&#xff1a; 每个孩子不管得分多少&#xff0c;起码分到一个糖果。任意两个相邻的孩子之间&#xff0c;得分较多的孩子必须拿多一些糖果。(若相同则…

不止代码 洛谷P1006 传纸条(dp)

传送门 走两次 dp[x1][y1][x2][y2]表示两条路分别到两个点的坐标后的最大值 为了防止走重&#xff0c;dp[x1][y1][x1][y1]赋值为无穷小 时间复杂度O&#xff08;n^4&#xff09; 代码 #include<cstdio> #include<cstring> #include<algorithm> #include<…

通俗易懂,C#如何安全、高效地玩转任何种类的内存之Span

前言作为.net程序员&#xff0c;使用过指针&#xff0c;写过不安全代码吗&#xff1f;为什么要使用指针&#xff0c;什么时候需要使用它&#xff1f;如果能很好地回答这两个问题&#xff0c;那么就能很好地理解今天了主题了。C#构建了一个托管世界&#xff0c;在这个世界里&…

P5180-[模板]支配树

正题 题目链接:https://www.luogu.com.cn/problem/P5180 题目大意 给出nnn个点的一张有向图&#xff0c;求每个点支配的点数量。 1≤n≤2105,1≤m≤31051\leq n\leq 2\times 10^5,1\leq m\leq 3\times 10^51≤n≤2105,1≤m≤3105 解题思路 首先定义半支配点semixsemi_xsemix…

P4062 [Code+#1]Yazid 的新生舞会(区间绝对众数+分治/树状数组维护高维前缀和)

P4062 [Code#1]Yazid 的新生舞会 杭电多校懂得都懂 Code1 分治 比较喜欢分治的做法&#xff0c;非常好写。skylee大佬题解 首先对于任何一个区间来说&#xff0c;由于两个端点不确定性非常难以一次性统计多组区间&#xff0c;因为它们没有相似之处。 考虑分治&#xff0c;…

牛客题霸 [判断回文] C++题解/答案

牛客题霸 [判断回文] C题解/答案 题目描述 给定一个字符串&#xff0c;请编写一个函数判断该字符串是否回文。如果回文请返回true&#xff0c;否则返回false。 题解&#xff1a; 左右两端同时向中间缩 代码&#xff1a; class Solution { public:/*** 代码中的类名、方法…

AC自动机:例题与机制详解

介绍 AC自动机是kmp算法和trie树的结合 大体就是做这样的题用&#xff1a; 可以发现&#xff0c;这题和trie树的区别是把多个单词往一篇文章匹配&#xff0c;而trie恰好相反 匹配的时候其实就是判断子串&#xff0c;所以又用到了kmp 定义失配指针nxt[i]&#xff1a;表示root到…

.NET Core实战项目之CMS 第七章 设计篇-用户权限极简设计全过程

写在前面这篇我们对用户权限进行极简设计并保留其扩展性。首先很感谢大家的阅读&#xff0c;前面六章我带着大家快速入门了ASP.NET Core、ASP.NET Core的启动过程源码解析及配置文件的加载过程源码解析并引入依赖注入的概念、Git的快速入门、Dapper的快速入门、Vue的快速入门。…

P4428-[BJOI2018]二进制【树状数组,set】

正题 题目链接:https://www.luogu.com.cn/problem/P4428 题目大意 长度为nnn的0/10/10/1串要求支持 修改一个位置求区间[l,r][l,r][l,r]有多少个子区间重排后的二进制数可以被三整除 1≤n≤1051\leq n\leq 10^51≤n≤105 解题思路 首先有22k%31(k∈Z)2^{2k}\%31(k\in Z)22k…

2021“MINIEYE杯”中国大学生算法设计超级联赛(5)Random Walk 2(推式子+矩阵逆+矩阵乘)

Random Walk 2 【2.4】Gauss-Jordan消元法求矩阵的逆 高斯消元求矩阵的逆&#xff0c;伴随单位矩阵一起消元即可。 [A,I]→[I,A−1][\text A,\text I]\to [\text I,\text A^{-1}][A,I]→[I,A−1] 移项变形&#xff0c;后就是个矩阵的逆&#xff0c;为啥赛时不写&#xff1f;&a…

牛客题霸 [顺时针旋转矩阵] C++题解/答案

牛客题霸 [顺时针旋转矩阵] C题解/答案 题目描述 有一个NxN整数矩阵&#xff0c;请编写一个算法&#xff0c;将矩阵顺时针旋转90度。 给定一个NxN的矩阵&#xff0c;和矩阵的阶数N,请返回旋转后的NxN矩阵,保证N小于等于300。 题解&#xff1a; 根据题目要求&#xff0c;先…

数论:扩展欧几里德(洛谷P1516 青蛙的约会)

欧几里德 基本思想&#xff1a;gcd(q,r)gcd(r,q%r); 证明&#xff0c;设q、r的最大公因数为a&#xff0c;则qxa&#xff0c;rya&#xff0c;xy互质 不妨设x>y&#xff08;显然如果小于会在一次gcd运算后交换&#xff09; 则q%r&#xff08;x%y&#xff09;*a 显然,其与r的最…

CF802O-April Fools‘ Problem(hard)【wqs二分,优先队列】

正题 题目链接:https://www.luogu.com.cn/problem/CF802O 题目大意 nnn天每条有aia_iai​和bib_ibi​。 每条可以花费aia_iai​准备至多一道题&#xff0c;可以花费bib_ibi​打印至多一道准备好了的题。 求准备kkk道题最少要花费多少。 1≤k≤n≤51051\leq k\leq n\leq 5\ti…