CF1307G-解题报告
最小费用流与线性规划
最小费用流问题可以考虑看成一个线性规划问题。
设
那么最小费用流问题等价于:
- 求
- 限制:
-
- 对所有
,有:
- 对所有
-
- 对所有
,有 。
- 对所有
- 共
个变量 , 条限制。
给出线性规划一般形式和其对偶问题:
原问题:
对偶问题:
这里
不加证明的给出以下定理:
- 线性规划和其对偶线性规划等价。
这里不给证明的原因是该定理证明较为繁杂,博主不会证明,且本博客内容与该性质内容关系不大。
把最小费用流问题对应线性规划的限制转化成一般形式:
其中
把这个线性规划的对偶形式写出来,限制一共有
考虑前
最后化成对偶线性规划为:
- 求
- 限制:
-
- 对于所有
,有:
- 对于所有
-
- 一共
条限制。
需要注意在推式子的时候,特别关注一下无入度点和无出度点的的情况,它们也是满足条件的。
发现所有式子都与
- 求
- 限制:
-
- 对于所有
,有:
- 对于所有
-
- 一共
条限制。
Solution
题目大意:给定
关注我们的对偶问题,发现限制如同最短路,而
关注我们对偶线性规划求的东西,可以令
我们把所有有用的
如果令所有
由此可以得出结论,凸包上的所有切线都形如
设
原问题等价于给定
现在唯一的问题是
所以,我们枚举
代码
int n,m;
struct edge{
int to,next,w,f;
inline void Init(int to_,int ne_,int w_,int f_){
to=to_;next=ne_;w=w_;f=f_;
}
}li[N*N*2];
int head[N],tail=1,now[N],d[N],s,t,Ans,A[N],ans,Q;
bool vis[N];
queue<int> q;
inline void Add(int from,int to,int w,int f){
li[++tail].Init(to,head[from],w,f);head[from]=tail;swap(from,to);
li[++tail].Init(to,head[from],-w,0);head[from]=tail;
}
inline bool spfa(int s){
while(q.size()) q.pop();
bool op=0;
mset(d,INF);mset(vis,0);d[s]=0;q.push(s);vis[s]=1;now[s]=head[s];
while(q.size()){
int top=q.front();q.pop();vis[top]=0;
Next(top){
int to=li[x].to,f=li[x].f,w=li[x].w;if(!f||d[to]<=d[top]+w)continue;
d[to]=d[top]+w;if(!vis[to]) vis[to]=1,q.push(to);now[to]=head[to];
}
}
if(d[t]>=INF) return 0;else return 1;
}
inline int dinic(int k,int flow){
if(k==t) return flow;int rest=flow,x;vis[k]=1;
for(x=now[k];x&&rest;x=li[x].next){
int to=li[x].to,f=li[x].f,w=li[x].w;
if(!f||d[to]!=d[k]+w||(vis[to]&&to!=t)) continue;int val=dinic(to,min(rest,f));
if(!val) d[to]=INF;li[x].f-=val;li[x^1].f+=val;rest-=val;Ans+=val*w;
}
now[k]=x;
return flow-rest;
}
signed main(){
// freopen("my.in","r",stdin);
// freopen("my.out","w",stdout);
read(n);read(m);
rep(i,1,m){
int from,to;read(from);read(to);int w;read(w);
Add(from,to,w,1);
}
s=1,t=n;
rep(i,1,n){
if(!spfa(s)) break;
ans+=dinic(s,1);
A[i]=Ans;
}
read(Q);
rep(i,1,Q){
int x;read(x);
ld nowans=INF;
rep(i,1,n){
if(!A[i]) break;
cmin(nowans,(ld)(A[i]+x)/(ld)(i));
}
printf("%0.7Lf\n",nowans);
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?