TLE一个点,不知道为什么就是1.20s,一直过不去。。。求助QAQ
查看原帖
TLE一个点,不知道为什么就是1.20s,一直过不去。。。求助QAQ
222220
elinatotoro楼主2022/5/1 22:12
#include<bits/stdc++.h>
using namespace std;
struct node
{
	long long next,to,ww;
};
node e[3200001];
long long s,t;
long long deep[800001],head[200001],sum=1; 
long long inf=1e8;
void add(int x,int y,int z)
{
	sum++;
	e[sum].to=y;
	e[sum].next=head[x];
	e[sum].ww=z;
	head[x]=sum;
}
bool bfs()
{
	long long i,u,v;
	queue<long long>qu;
	memset(deep,0,sizeof(deep));
	deep[s]=1;
	qu.push(s);
	while(!qu.empty())
	{
		u=qu.front();
		qu.pop();
		for(i=head[u];i;i=e[i].next)
		{
			v=e[i].to;
			if(e[i].ww>0&&!deep[v])
			{
				deep[v]=deep[u]+1;
				qu.push(v);
			}
		}
	}
	return deep[t];
}
long long dfs(long long u,long long flow)
{
	if(u==t)
	{
		return flow;
	}
	long long fl=0,i,v,c;
	for(i=head[u];i&&flow;i=e[i].next)
	{
		v=e[i].to;
		if(e[i].ww>0&&deep[v]==deep[u]+1)
		{
			c=dfs(v,min(flow,e[i].ww));
			e[i].ww-=c;
			e[i^1].ww+=c;
			flow-=c;
			fl+=c;
		}
	}
	if(fl==0)
	{
		deep[u]=0;
	}
	return fl;
}
long long dinic()
{
	long long maxflow=0;
	while(bfs())
	{
		maxflow+=dfs(s,inf);
	}
	return maxflow;
}
int main()
{
	long long n,m,i,x,y,z,ans;
    scanf("%lld%lld",&n,&m);
	s=1;
	t=n;
    for(i=1;i<=m;i++)
    {
        scanf("%lld%lld%lld",&x,&y,&z);
        add(x,y,z*1007+1);
        add(y,x,0);
    }
    ans=dinic();
    printf("%lld %lld\n",ans/1007,ans%1007);
    return 0;
}
2022/5/1 22:12
加载中...