dinic算法加上当前弧优化计算最大流
#include<bits/stdc++.h>
#define LL long long
#define PII pair<int,int>
#define PLI pair<LL,int>;v
#define lson o<<1,l,mid
#define rson o<<1|1,mid+1,r
#define lowbit(x) (x&(-x))
using namespace std;
const int maxn=210,maxm=5010;
const int inf=1e9+10;
int n,m,s,t;
int head[maxn],nxt[2*maxm],to[2*maxm],weight[2*maxm],cnt,depth[maxn],cur[maxn];
void init(){
memset(head,-1,sizeof(head));
cnt=0;
}
void add(int u,int v,LL w){
to[cnt]=v;
weight[cnt]=w;
nxt[cnt]=head[u];
head[u]=cnt++;
}
void add_edge(int u,int v,LL w){
add(u,v,w);
add(v,u,0);
}
int dfs(int u,int flow){
if(u==t) return flow;
for(int& i=cur[u];~i;i=nxt[i]){
int v=to[i];
if(depth[v]==depth[u]+1 && weight[i]!=0){
int di=dfs(v,min(flow,weight[i]));
if(di>0){
weight[i]-=di;
weight[i^1]+=di;
return di;
}
}
}
return 0;
}
bool bfs(){
queue<int> q;
memset(depth,0,sizeof(depth));
depth[s]=1;
q.push(s);
while(!q.empty()){
int u=q.front();
q.pop();
for(int i=head[u];~i;i=nxt[i]){
int v=to[i];
if(depth[v]==0 && weight[i]>0){
depth[v]=depth[u]+1;
q.push(v);
}
}
}
if(depth[t]>0) return 1;
return 0;
}
int dinic(){
int ans=0;
while(bfs()){
for(int i=1;i<=n;i++){
cur[i]=head[i];
}
while(int d=dfs(s,inf)){
ans+=d;
}
}
return ans;
}
int main(){
scanf("%d %d %d %d",&n,&m,&s,&t);
init();
for(int i=0;i<m;i++){
int u,v,w;
scanf("%d %d %d",&u,&v,&w);
add_edge(u,v,w);
}
int ans=dinic();
printf("%d\n",ans);
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥