丽尔巴茨 @ 2019-06-25 02:11:46
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <queue>
using namespace std;
const int maxn=1e4+7,maxm=2e5+7,inf=0x3f3f3f3f;
int h[maxn],e[maxm],ne[maxm],w[maxm],idx;
int dep[maxn];
int n,m,s,t;
void add(int a,int b,int c){
e[idx]=b,w[idx]=c,ne[idx]=h[a],h[a]=idx++;
}
bool bfs(int s,int t){
memset(dep,0,sizeof dep);
dep[s]=1;queue<int>q;q.push(s);
while(q.size()){
int u=q.front();q.pop();
if(u==t)break;
for(int i=h[u];~i;i=ne[i]){
int j=e[i];
if(!dep[j]&&w[i]>0)dep[j]=dep[u]+1,q.push(j);
}
}
if(dep[t])return 1;
return 0;
}
int dfs(int x,int v){
if(x==t||v==0)return v;
int f,res=0;
for(int i=h[x];~i;i=ne[i]){
int j=e[i];
if(dep[j]==dep[x]+1){
f=dfs(j,min(w[i],v));
w[i]-=f,w[i^1]+=f,v-=f,res+=f;
if(v==0)break;
}
}
return res;
}
int main()
{
int a,b,c;
scanf("%d%d%d%d",&n,&m,&s,&t);
memset(h,-1,sizeof h);
while(m--){
scanf("%d%d%d",&a,&b,&c);
add(a,b,c);add(b,a,0);
}
int ans=0;
while(bfs(s,t))ans+=dfs(s,inf);
printf("%d\n",ans);
return 0;
}
200ms完成,12ms的大佬是怎么过的能说一下嘛?
by 小粉兔 @ 2019-06-25 03:16:08
SAP
by NaCly_Fish @ 2019-06-25 07:20:23
@小粉兔 兔兔怎么还修仙啊,明天不上课吗qwq
by かなで @ 2019-06-25 09:08:57
@丽尔巴茨 虽然我只是一个16ms的菜鸡....但我用的是ISAP
by wxwoo @ 2019-06-25 09:47:39
HLPP(但好像这玩意常数巨大
by 丽尔巴茨 @ 2019-06-25 10:57:29
谢谢大佬们