critnos @ 2020-09-25 12:57:10
RT,#9 #10 一直 TLE,最好的差 40ms,真的卡不动了。。。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct edge
{
int u,nxt,v;
}a[10005];
int head[205];
int book[205];
int col;
struct pret
{
int pre,v;
}pre[205];
int cnt=1,n,s,t;
int q[10005];
int beg,ed;
void add(int x,int y,int v)
{
a[++cnt].v=v;
a[cnt].u=y;
a[cnt].nxt=head[x];
head[x]=cnt;
}
bool bfs()
{
col++;
ed=beg=0;
q[ed++]=s;
book[s]=col;
while(beg!=ed)
{
int x=q[beg++],d;
for(int i=head[x];i;i=a[i].nxt)
{
d=a[i].u;
if(book[d]!=col&&a[i].v)
{
pre[d].v=x;
pre[d].pre=i;
if(d==t) return 1;
book[d]=col;
q[ed++]=d;
}
}
}
return 0;
}
int read()
{
int s=0;
char ch=getchar();
while(ch<'0'||ch>'9') ch=getchar();
while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
return s;
}
ll EK()
{
int i,mn;
ll ans=0;
while(bfs())
{
mn=INT_MAX;
for(i=t;i!=s;i=pre[i].v)
mn=min(mn,a[pre[i].pre].v);
ans+=mn;
for(i=t;i!=s;i=pre[i].v)
a[pre[i].pre].v-=mn,a[pre[i].pre^1].v+=mn;
}
return ans;
}
int main()
{
int m,x,y,v;
scanf("%d%d%d%d",&n,&m,&s,&t);
while(m--)
{
x=read(),y=read(),v=read();
add(x,y,v);
add(y,x,0);
}
cout<<EK();
}
by pocafup @ 2020-09-25 13:10:01
10卡过去了一次,9真的卡不过去,最好差了 20 ms
by 某科学的蒟蒻 @ 2020-09-25 14:05:03
您写下多路增广之类的?
by YLWang @ 2020-09-25 15:46:50
网络流题根据相关法律法规是卡 EK 放 Dinic 的
by critnos @ 2020-09-26 13:15:23
@pocafup @某科学的蒟蒻 @YLWang thx