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

AcWing 2236:伊基的故事 I - 道路重建 ← 最大流之关键边 + Dinic算法

【题目来源】
https://www.acwing.com/problem/content/2238/

【题目描述】
伊基是一个小国 – 凤凰国的国王。凤凰国是如此之小,以至于只有一个城市负责日常商品的生产,并使用公路网将商品运送到首都。
伊基发现本国最大的问题在于运输速度太慢了。因为伊基以前是 ACM/ICPC 的参赛者,他意识到这其实是一个最大流问题。他编写了一个最大流程序,并计算出了当前运输网络的最大运输能力。
他对运输速度的现状十分不满,并希望能够提高国家的运输能力。
提高运输能力的方法很简单,伊基将在运输网络中重建一些道路,以使这些道路具有更高的运输能力。但是不幸的是,凤凰国的财力有限,道路建设经费只够重建一条道路。伊基想要知道共有多少条道路可以纳入重建道路候选名单。这些道路需要满足,将其重建后,国家的总运输能力能够增加。

【输入格式】
第一行包含 N 和 M,分别表示城市和道路的数量。
接下来 M 行,每行包含三个整数 a,b,c,表示存在一条道路从城市 a 通往城市 b,且运输能力为 c。所有道路都是有方向的。
城市编号从 0 到 N−1。生产日常商品的城市为 0 号城市,首都为 N−1 号城市。

【输出格式】
输出一个整数 K,表示存在 K 条道路,对其中每条道路进行重建都会增加运输网络的运输能力。

【输入样例】
2 1
0 1 1

【输出样例】
1

【数据范围】
1≤N≤500,
1≤M≤5000,
0≤a,b<N,
0≤c≤100

【算法分析】
Dinic算法:https://blog.csdn.net/hnjzsyjyj/article/details/161317988

【算法代码】

#include <bits/stdc++.h>
using namespace std;typedef long long LL;
const int N=5e2+5,M=2e4+5;
const int INF=0x3f3f3f3f;int n,m,S,T;
int h[N],e[M],ne[M],f[M],idx;
int d[N],cur[N],q[N];
bool vis_s[N],vis_t[N];int ea[M],eb[M],eid[M]; //edgevoid add(int a,int b,int c) {f[idx]=c,e[idx]=b,ne[idx]=h[a],h[a]=idx++;f[idx]=0,e[idx]=a,ne[idx]=h[b],h[b]=idx++;
}bool bfs() {memset(d,-1,sizeof d);int hh=0,tt=0;q[0]=S,d[S]=0;while(hh<=tt) {int u=q[hh++];for(int i=h[u]; ~i; i=ne[i]) {int v=e[i];if(d[v]==-1 && f[i]) {d[v]=d[u]+1;q[++tt]=v;}}}return d[T]!=-1;
}int dfs(int u,int lim) {if(u==T) return lim;int flow=0;for(int i=cur[u]; ~i && flow<lim; i=ne[i]) {cur[u]=i;int v=e[i];if(d[v]==d[u]+1 && f[i]) {int t=dfs(v,min(f[i],lim-flow));if(!t) d[v]=-1;f[i]-=t,f[i^1]+=t,flow+=t;}}return flow;
}LL dinic() {LL r=0,flow=0;while(bfs()) {for(int i=0; i<n; i++) cur[i]=h[i];while(flow=dfs(S,INF)) r+=flow;}return r;
}void dfs1(int u) { //points that can be reached from Svis_s[u]=1;for(int i=h[u]; ~i; i=ne[i]) {int v=e[i];if(!vis_s[v] && f[i]) dfs1(v);}
}void dfs2(int u) { //Be able to reach point Tvis_t[u]=1;for(int i=h[u]; ~i; i=ne[i]) {int v=e[i];if(!vis_t[v] && f[i^1]) dfs2(v);}
}int main() {memset(h,-1,sizeof h);cin>>n>>m;S=0, T=n-1;for(int i=0; i<m; i++) {int a,b,c;cin>>a>>b>>c;ea[i]=a,eb[i]=b,eid[i]=idx;add(a,b,c);}dinic();dfs1(S), dfs2(T);int ans=0;for(int i=0; i<m; i++) {int a=ea[i],b=eb[i],idx=eid[i];if(f[idx]==0 && vis_s[a] && vis_t[b]) ans++;}cout<<ans<<endl;return 0;
}/*
in:
2 1
0 1 1out:
1
*/




【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/161471616
https://blog.csdn.net/hnjzsyjyj/article/details/161317988
https://blog.csdn.net/hnjzsyjyj/article/details/161438841
https://blog.csdn.net/hnjzsyjyj/article/details/161441409
https://blog.csdn.net/hnjzsyjyj/article/details/161446211

 

http://www.jsqmd.com/news/907850/

相关文章:

  • PyTorch Geometric (PyG) 安装避坑全记录:从依赖冲突到版本匹配的保姆级教程
  • ArcGIS Pro 3.0 保姆级教程:从零开始,5分钟搞懂地图和场景的区别与选择
  • 独立游戏开发实战:基于Godot引擎的Roguelike游戏设计与实现
  • 2026年评价高的羽衣甘蓝粉代餐/羽衣甘蓝粉代加工推荐厂家精选 - 行业平台推荐
  • 【AI大模型应用开发工程师特训笔记】第04讲(第8章):面向对象编程
  • 2026南通驾校推荐榜:C1/C2/D/E 证培训、摩托车驾培、机器人教学驾校多维解析 摘要 - 海棠依旧大
  • 2025-2026年上海吉日搬场有限公司电话查询:选择搬场服务前需核实资质与合同条款分析 - 品牌推荐
  • 从助焊膏选择到焊后清理:一次搞懂QFN芯片手工焊接的全流程避坑要点
  • 知识嫁接技术:突破边缘AI部署瓶颈的新方法
  • C51数学函数性能优化与嵌入式开发实践
  • 从《绝地求生》到《原神》:盘点那些用虚幻引擎和Unity 3D打造的现象级PC游戏
  • AI电台主持人系统架构:从情感语音合成到实时交互的工程实践
  • 2026年质量好的山东微型千类轴承/高速千类轴承/替代进口千类轴承/精密千类轴承实力工厂推荐 - 品牌宣传支持者
  • 保姆级教程:在CentOS 7.9上用OpenStack All-in-One搞定虚拟机上网(附浮动IP配置)
  • 2025-2026年上海吉日搬场有限公司电话查询:搬家前需核实服务范围与合同条款指南 - 品牌推荐
  • 2025-2026年犀鸟搬场服务(上海)有限公司电话查询:搬家服务选择前需核实资质与合同 - 品牌推荐
  • Win11下复活IE浏览器:一个DLL文件替换的保姆级教程(解决老旧系统兼容问题)
  • 没有USB转TTL模块?别急!用STM32F103C8T6单片调试HC-06蓝牙的保姆级避坑指南
  • 从“猫狗大战”到图像生成:用PyTorch搭建DCGAN玩转动漫头像创作
  • 3D堆叠架构突破LLM推理内存墙与热管理挑战
  • 2026年口碑好的浇注料/轻质浇注料/粘土质耐火浇注料/磷酸盐结合浇注料源头工厂推荐 - 品牌宣传支持者
  • 别再用strcmp了!这道ZZULIOJ 1155题,教你用ASCII码映射搞定自定义字符串比较
  • 稀疏专家混合在视觉Transformer中的应用:原理、实现与调优
  • Mali-C10 GDC工具:图像畸变校正实战指南
  • 论文AI率降到安全线要多少钱?2026年降AI工具TOP10省钱榜
  • AI重构职场沟通:从策略性说服到伦理边界的探索
  • 2025-2026年北京恒瑞宏晟机电设备有限公司电话查询:选型前请核实资质与合同条款 - 品牌推荐
  • 2026年比较好的羽衣甘蓝粉代餐/羽衣甘蓝粉贴牌/江苏羽衣甘蓝粉/羽衣甘蓝粉原料主流厂家对比评测 - 行业平台推荐
  • AI意识探索:从量子计算到认知架构的技术路径与伦理挑战
  • 单卡微调大模型:QLoRA技术原理与实战指南