【POJ3686】The Windy's
题目
解析:
这道题建模挺妙的,难点在于如何处理累积时间。
首先对于一个车间,如果加工了个玩具,那么总时间为
由此我们发现,每一个玩具可以提出来单独算。将每个车间拆成个点,第个点表示倒数第个生产出来的玩具。每个玩具分别向连一条容量为,费用为的边。建完图后跑费用流即可。
code:
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <queue>
using namespace std;
const int Maxn=2555;
const int Maxm=127555;
const int inf=1e9;
int T,n,m,size,s,t,sum;
int first[Maxn],dis[Maxn],tmp[Maxn],vis[Maxn],f[55][55];
struct shu{int to,next,l,c;}e[Maxm<<1];
inline void add(int x,int y,int l,int c)
{
e[++size].next=first[x],first[x]=size,e[size].to=y,e[size].l=l,e[size].c=c;
}
inline int min(int x,int y){return x>y ? y : x;}
inline void init()
{
scanf("%d%d",&n,&m);
t=n*m+n+1,size=-1,sum=0;
for(int i=s;i<=t;i++) first[i]=-1;
for(int i=1;i<=n;i++)
{
add(s,i,1,0),add(i,s,0,0);
for(int j=1;j<=m;j++)
{
scanf("%d",&f[i][j]);
add(j*n+i,t,1,0),add(t,j*n+i,0,0);
}
}
for(int i=1;i<=n;i++)
for(int k=1;k<=m;k++)
for(int j=1;j<=n;j++)
add(i,k*n+j,1,j*f[i][k]),add(k*n+j,i,0,-j*f[i][k]);
}
inline bool spfa()
{
queue<int>q;
for(int i=s;i<=t;i++) dis[i]=inf,tmp[i]=first[i];
q.push(s),dis[s]=0,vis[s]=1;
while(!q.empty())
{
int p=q.front();q.pop(),vis[p]=0;
for(register int u=first[p];~u;u=e[u].next)
{
int to=e[u].to;
if(!e[u].l || dis[to]<=dis[p]+e[u].c) continue;
dis[to]=dis[p]+e[u].c;
if(!vis[to]) vis[to]=1,q.push(to);
}
}
return dis[t]!=inf;
}
inline int dfs(int p,int flow)
{
if(p==t) return flow;
int s=0;vis[p]=1;
for(register int &u=tmp[p];~u;u=e[u].next)
{
int to=e[u].to;
if(!e[u].l || dis[to]!=dis[p]+e[u].c || vis[to]) continue;
int minn=dfs(to,min(flow-s,e[u].l));
e[u].l-=minn,e[u^1].l+=minn,s+=minn,sum+=minn*e[u].c;
if(s==flow) break;
}
vis[p]=0;
return s;
}
inline void solve()
{
while(spfa()){while(dfs(s,inf));}
printf("%.6f\n",(double)sum/n);
}
int main()
{
scanf("%d",&T);
while(T--)
{
init();
solve();
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具