当前位置: 首页 > 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.gsyq.cn/news/1419153.html

相关文章:

  • ArcGIS Pro 3.0 保姆级教程:从零开始,5分钟搞懂地图和场景的区别与选择
  • 2026年评价高的羽衣甘蓝粉代餐/羽衣甘蓝粉代加工推荐厂家精选 - 行业平台推荐
  • 知识嫁接技术:突破边缘AI部署瓶颈的新方法
  • 从助焊膏选择到焊后清理:一次搞懂QFN芯片手工焊接的全流程避坑要点
  • Win11下复活IE浏览器:一个DLL文件替换的保姆级教程(解决老旧系统兼容问题)
  • 别再用strcmp了!这道ZZULIOJ 1155题,教你用ASCII码映射搞定自定义字符串比较
  • 2026年比较好的羽衣甘蓝粉代餐/羽衣甘蓝粉贴牌/江苏羽衣甘蓝粉/羽衣甘蓝粉原料主流厂家对比评测 - 行业平台推荐
  • DevSecOps实战:三大核心原则与自动化安全流水线构建
  • Gemini新功能上线即用:3步接入AI工作流,效率提升70%的实战手册
  • 2026年5月超轻鼠标品牌十大排行榜推荐:专业评测电竞减重性价比高价格注意事项 - 品牌推荐
  • 投票小程序如何制作,云帆投票详细教程 - 投票小程序
  • 企业级智能搜索实战:基于Amazon Kendra构建知识库
  • 如何用WeChatMsg打造你的个人数字记忆库:三步实现聊天记录永久保存
  • 智能解析:解锁智慧教育平台电子课本的本地化管理方案
  • AI驱动测试:mabl如何重塑DevOps中的软件质量保障
  • 别再只会看原理图了!开关电源里这些‘不起眼’的小元件,才是决定稳定性的关键(电阻/电容/电感选型详解)
  • 2026年5月昆明装修公司推荐:TOP5评测大户型整装性价比高专业价格 - 品牌推荐
  • 2026年知名的振动麈擦焊接机/摩擦焊接机/无锡塑料焊接机/超声波塑料焊接机公司选择指南 - 品牌宣传支持者
  • 观察使用taotoken token plan套餐在长期项目中的成本节省效果
  • 2026年5月25-30万家用SUV车型推荐:TOP5排名家庭出行舒适评测专业价格 - 品牌推荐
  • 别再死记硬背三次握手了!用Wireshark抓个包,亲手‘看见’TCP连接全过程
  • 从循环到函数式:JavaScript数据处理的核心思维转变
  • 别再只画平面电感了!用ANSYS HFSS玩转TSV三维集成电感,保姆级建模与仿真避坑指南
  • 告别WMMA API:用PTX的LDMATRIX和MMA指令在Ampere架构上重构你的HGEMM Kernel
  • ARM Cortex-M微控制器MTB技术原理与应用优化
  • 如何永久守护你的数字记忆:WeChatMsg聊天记录智能保存完全指南
  • 2026年门窗开启方式改造阳台门窗维修/隔热阳光房门窗维修优质供应商推荐 - 品牌宣传支持者
  • 2026年比较好的水果包装箱/快递包装箱/包装箱长期合作厂家推荐 - 行业平台推荐
  • 5分钟搞定老旧视频修复!Video2X AI画质增强实战指南
  • 用SpringBoot+Vue仿写一个宠物医院系统,我踩过的这些坑你一定要避开