DGL__DGL_AFO @ 2024-09-04 11:07:42
记录
除了#10和#11都没跑到10ms
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,m,s,t;
ll h[2140],e[51450],ne[51450],w[51450],idx;
int st[2140];
int q[214514],l=1,r=1;
ll p[2140],k[2140],ans;
inline void add(int a,int b,int c)
{
ne[idx]=h[a];
e[idx]=b;
w[idx]=c;
h[a]=idx++;
}
inline bool bfs()
{
memset(p,0,sizeof p);
memset(st,0,sizeof st);
memset(k,0x7f,sizeof k);
l=1;r=1;
q[1]=s;
st[s]=1;
while(l<=r)
{
int x=q[l];
for(int i=h[x];~i;i=ne[i])
{
int y=e[i];
if(!st[y]&&w[i]>0)
{
st[y]=1;
q[++r]=y;
k[y]=min(k[x],w[i]);
p[y]=i;
if(y==t)
return true;
}
//cout<<i<<' ';
}
l++;
}
return false;
}
void EK()
{
while(bfs())
{
ans+=k[t];
for(int i=t;i!=s;i=e[p[i]+1])
{
//cout<<i<<' ';
w[p[i]]-=k[t];
w[p[i]+1]+=k[t];
}
//cout<<k[t]<<'\n';
/*for(int i=0;i<=idx-1;i+=2)
cout<<w[i]<<' '<<w[i+1]<<'\n';*/
}
}
int main()
{
memset(h,-1,sizeof h);
cin>>n>>m>>s>>t;
for(int i=1;i<=m;i++)
{
ll a,b,c;
cin>>a>>b>>c;
add(a,b,c);
add(b,a,0);
}
EK();
cout<<ans;
return 0;
}
by lao_wang @ 2024-09-04 11:10:19
亲亲,这边建议您写 dinic ,感觉这个代码像在写费用流
by DGL__DGL_AFO @ 2024-09-04 11:17:40
近视后人:
w[p[i]+1]-->w[p[i]^1]
e[p[i]+1]-->e[p[i]^1]
即可AC
找反向边寄了
by Locix_Elaina_Celome @ 2024-09-04 12:08:36
元神怎么你了
by iqiqiqiqiqiqiqiq @ 2024-09-04 12:43:42
这个帖子是不是有点标题党了?
by iqiqiqiqiqiqiqiq @ 2024-09-04 12:44:11
话说回来我也不会