EK 求助
查看原帖
EK 求助
203623
critnos楼主2020/9/25 12:57

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();
} 
2020/9/25 12:57
加载中...