Compound_Interest @ 2022-07-16 16:15:34
EK蒟蒻82ptsT了两个点
代码如下
#include<cstdio>
#include<queue>
#define int long long
using namespace std;
const int maxn=5e3+10;
queue<int>q;
struct edge{
int nxt,to,w;
}e[maxn<<1];
struct node{
int v,edg;
}pre[maxn];
int ans,n,m,s,t,cnt=2,head[maxn],dis[maxn];
bool vis[maxn];
void add(int u,int v,int w){
e[cnt].to=v,e[cnt].w=w,e[cnt].nxt=head[u];
head[u]=cnt++;
}
bool bfs(){
for(int i=1;i<=n;i++) vis[i]=0;
dis[s]=0x3f3f3f3f;
while(!q.empty()) q.pop();
q.push(s);
while(!q.empty()){
int u=q.front();
q.pop();
vis[u]=1;
for(int i=head[u];i;i=e[i].nxt){
int v=e[i].to;
if(vis[v]||e[i].w==0) continue;
q.push(v);
dis[v]=min(dis[u],e[i].w);
pre[v].v=u,pre[v].edg=i;
if(v==t) return 1;
}
}
return 0;
}
signed main(){
scanf("%lld%lld%lld%lld",&n,&m,&s,&t);
for(int i=1;i<=m;i++){
int u,v,w;
scanf("%lld%lld%lld",&u,&v,&w);
add(u,v,w),add(v,u,0);
}
while(bfs()){
for(int i=t;i!=s;i=pre[i].v){
e[pre[i].edg].w-=dis[t];
e[pre[i].edg^1].w+=dis[t];
}
ans+=dis[t];
}
printf("%lld",ans);
return 0;
}
by Compound_Interest @ 2022-07-16 16:41:49
判完重边变成了91pts,还是T了一个点
有DALAO能帮个忙吗?