当前位置: 首页 > news >正文

P2053 [SCOI2007] 修车

P2053 [SCOI2007] 修车

大意

\(N\) 个顾客,\(M\) 个技术人员,不同的技术人员对不同的车的修理时间是不同的,那么求顾客们的最短等待时间。

思路

我们发现,对于这个题来说,很像排队接水(不是)。

考虑每个技术人员的时候,我们发现如下规律,一个技术人员对答案所作出的贡献是:

\[最后一个顾客时间 \times 1 + 倒数第二个顾客时间 \times 2 ... 倒数第 k 个顾客时间 \times k \]

我们发现,每个技术人员在不同时刻的状态是不一样的,对答案所做出的贡献也是,不一样的,但是每个状态下的技术人员只能给一个人修车,但是顾客可以自行选择某个状态下的某个技术人员。

这个问题我们可以用网络流来解决,我们对于每个技术人员,将其拆分为 \(n\) 个状态,对于正在给倒数第 \(k\) 个顾客修车的师傅 \(i\) 对顾客 \(j\) 连一条容量为 \(1\),费用为 \(t_{i, j} \times k\),对于源点向每个技术人员的每个状态连容量为 \(1\),花费为 \(0\) 的边,对于每个顾客都向汇点 \(T\) 去连上容量为 \(1\),花费为 \(0\) 的边。

这样跑出的最小费用最大流就一定会自己最优的选择出最短的排队修车的时间。

代码

#include<bits/stdc++.h>
using namespace std;const int MAXN = 1005;
const int MAXM = 100005;
struct node{int u, v, nxt, c, w;
}e[MAXM * 2];int S, T;
int tot, h[MAXN], d[MAXN], pre[MAXN];
bool vis[MAXN];void init(){tot = 0;memset(h, -1, sizeof(h));
}void add(int u, int v, int c, int w){e[tot] = {u, v, h[u], c, w};h[u] = tot ++;e[tot] = {v, u, h[v], 0, -w};h[v] = tot ++;
}bool spfa(){memset(vis, 0, sizeof(vis));memset(d, 0x3f, sizeof(d));memset(pre, -1, sizeof(pre));queue<int> q;q.push(S);d[S] = 0;vis[S] = true;while(!q.empty()){int u = q.front();q.pop();vis[u] = false;for(int i = h[u];~i;i = e[i].nxt){int v = e[i].v;if(e[i].c > 0){if(d[v] > d[u] + e[i].w){d[v] = d[u] + e[i].w;pre[v] = i;if(!vis[v]){q.push(v);vis[v] = true;}}}}}return (d[T] != 0x3f3f3f3f);
}int EK(){int res = 0;while(spfa()){int Min = 1e9;for(int i = T;i != S;i = e[pre[i]].u){Min = min(Min, e[pre[i]].c);}for(int i = T;i != S;i = e[pre[i]].u){e[pre[i]].c -= Min;e[pre[i] ^ 1].c += Min;res += e[pre[i]].w * Min;}}return res;
}int m, n;int main(){// freopen("repair.in", "r", stdin);// freopen("repair.out", "w", stdout);cin >> m >> n;init();S = 0, T = n + m * n + 1;for(int i = 1;i <= n;i ++){add(S, i, 1, 0);}for(int i = 1;i <= n;i ++){for(int j = 1;j <= m;j ++){int t_cost;cin >> t_cost;for(int k = 1;k <= n;k ++){int pos = n + (j - 1) * n + k;add(i, pos, 1, k * t_cost);}}}for(int j = 1;j <= m;j ++){for(int k = 1;k <= n;k ++){add(n + (j - 1) * n + k, T, 1, 0);}}int ans = EK();printf("%.2f\n", (double)ans / n);return 0;
}
http://www.jsqmd.com/news/384474/

相关文章:

  • 2026年靠谱的无锡画册/无锡画册制作高评价厂家推荐 - 品牌宣传支持者
  • 把运镜写进剧情:Seedance 2.0 场景化镜头提示词合集(短视频向)
  • 2026年2月4G远程入侵报警主机实力厂家口碑排行揭秘,智慧工厂出入口控制系统/4G烟雾报警器,报警主机制造企业怎么选择 - 品牌推荐师
  • 2026年评价高的多层共挤挤出模具/塑料挤出模具厂家选择参考建议 - 品牌宣传支持者
  • 2026年比较好的高密齿散热片/型材散热片厂家专业度参考(精选) - 品牌宣传支持者
  • 2026年口碑好的高纯度硫光气/医药用硫光气厂家热销推荐 - 品牌宣传支持者
  • 天虹购物卡回收指南:如何最高价回收您的购物卡? - 团团收购物卡回收
  • 告别低效繁琐!千笔·专业论文写作工具,研究生论文救星
  • 2026年比较好的四氟氨水罐/四氟双氧水罐厂家推荐与采购指南 - 品牌宣传支持者
  • 2026冲刺用!8个AI论文工具测评:本科生毕业论文+开题报告写作全攻略
  • 2026年靠谱的长城润滑油一级经销商/长城润滑油经销商全方位厂家推荐参考 - 品牌宣传支持者
  • 吐血推荐!专科生专属AI论文网站 —— 千笔写作工具
  • [特殊字符] 解放你的开发效率!探索 Synkra AIOS 框架
  • 2026年大件家具运输,口碑较好的物流方案提供商,大件运输/大件物流,大件物流公司怎么选择 - 品牌推荐师
  • 2026年口碑好的卫浴橱柜板模具/地板模具厂家选购参考建议 - 品牌宣传支持者
  • 2026年热门的USB电烙铁/便携式电烙铁厂家用户好评推荐 - 品牌宣传支持者
  • buildroot构建linux最小系统记录
  • 2026年靠谱的金蝶ERP软件/深圳金蝶云星空高评分推荐系统平台 - 品牌宣传支持者
  • 陶板定制口碑榜:2026年优质服务商推荐,陶土板/陶板/陶百叶/陶棍/陶砖,陶板施工推荐排行 - 品牌推荐师
  • 2026年靠谱的企业微信CRM系统/企业微信财务软件精选推荐生产商 - 品牌宣传支持者
  • 实用指南:【LeetCode精选算法】滑动窗口专题一
  • 2026年比较好的香港工业级热风枪/香港维修热风枪全方位厂家推荐参考 - 品牌宣传支持者
  • 2026年口碑好的折弯机液压夹具/折弯机液压上夹具高评分品牌推荐(畅销) - 品牌宣传支持者
  • 【雷达原理学习笔记 魏青】49. 雷达作用距离(六)
  • 17:【Python】pip install失败 SSL证书错误 / HTTPSConnectionPool(证书链问题)
  • 计算机毕业设计:我劝你别选“管理系统“
  • 2026年2月口碑良好的大件运输厂家推荐来啦,大件运输/大件物流,大件运输厂家口碑推荐 - 品牌推荐师
  • 19:【2026推荐】uv venv创建 激活 比conda/pip快10倍用法
  • 2025精小型调节阀大品牌供货商排名,气动高温调节阀/自力式调节阀/特种调节阀/气动三通调节阀/高性能调节阀/电动调节阀调节阀工厂哪家权威 - 品牌推荐师
  • 20:【Python】VS Code / Cursor / PyCharm解释器不识别 / 插件崩溃