求助zkw费用流:MLE
查看原帖
求助zkw费用流:MLE
537046
大眼仔Happy楼主2023/8/24 22:20

百思不得其解,但是就AC前两个,剩下全MLE。

第3个点n=20都MLE了

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=105,M=N*(N+2);
const ll inf=2e18;
int n,S,T;
ll maxflow,mincost;
ll inline read()
{
	ll num=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){num=(num<<3)+(num<<1)+ch-'0';ch=getchar();}
	return num*f;
}
struct edge{int u,v,nxt;ll f,c;}e[M<<1];
int cnt,head[N<<1],now[N<<1];
void add(int u,int v,ll f,ll c)
{
	e[++cnt]=(edge){u,v,head[u],f,c};
	head[u]=cnt;
}
void af(int u,int v,ll f,ll c){add(u,v,f,c);add(v,u,0,-c);}
bool vis[N<<1];
ll dis[N<<1];
bool SPFA()
{
	queue<int>q;
	for(int i=1;i<=T;i++)dis[i]=inf;
	q.push(S);dis[S]=0;vis[S]=1;
	while(!q.empty())
	{
		int u=q.front();q.pop();
		vis[u]=0;
		for(int i=head[u];i;i=e[i].nxt)
		{
			int v=e[i].v;ll f=e[i].f,c=e[i].c;
			if(f&&dis[v]>dis[u]+c)
			{
				dis[v]=dis[u]+c;
				if(!vis[v])vis[v]=1,q.push(v);
			}
		} 
	}
	return dis[T]!=inf;
}
ll dfs(int u,ll flow)
{
	if(u==T){vis[T]=1;return flow;}
	ll k,res=0;
	for(int i=now[u];i;i=e[i].nxt)
	{
		now[u]=i;
		int v=e[i].v;ll f=e[i].f,c=e[i].c;
		if(f&&dis[v]==dis[u]+c)
		{
			k=dfs(v,min(flow,f));
			if(k==0)dis[v]=inf;
			e[i].f-=k;
			e[i^1].f+=k;
			res+=k;
			flow-=k;
			mincost+=k*c;
		}
		if(!flow)break;
	}
	return res;
}
ll a[N][N];
void zkw()
{
	cnt=1;maxflow=mincost=0;
	memset(head,0,sizeof(head));
	memset(e,0,sizeof(e));
	for(int i=1;i<=n;i++)
	{
		af(S,i,1,0);af(i+n,T,1,0);
		for(int j=1;j<=n;j++)af(i,j+n,1,a[i][j]);
	}
	while(SPFA())
	{
		for(int i=1;i<=T;i++)now[i]=head[i];
		vis[T]=1;
		while(vis[T])
		{
			vis[T]=0;
			maxflow+=dfs(S,inf);
		}
	}
}
int main(){
	scanf("%d",&n);S=2*n+1;T=2*n+2;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			a[i][j]=read();
	zkw();printf("%lld\n",mincost);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			a[i][j]=-a[i][j];
	zkw();printf("%lld\n",-mincost);
	return 0;
}

3.in:
20
43 13 31 41 78 92 7 27 85 95 43 63 53 62 55 92 44 80 62 65 
45 78 22 18 17 52 79 19 52 1 96 35 74 40 9 91 38 39 46 46 
45 51 40 77 48 50 68 58 36 80 56 56 69 64 89 42 9 76 67 60 
34 23 43 11 57 62 5 60 6 86 62 50 51 34 56 60 32 99 56 33 
92 35 16 54 18 12 12 61 3 90 6 75 90 65 13 27 36 89 83 97 
33 39 23 25 35 34 4 68 38 48 3 88 77 18 2 76 90 7 64 10 
87 94 86 95 59 59 83 51 12 95 40 25 63 90 80 82 46 99 89 50 
1 90 72 20 58 69 70 84 13 45 2 37 38 24 93 96 6 55 35 40 
69 80 58 44 13 8 55 17 83 79 69 4 90 61 37 3 96 23 8 76 
59 6 20 90 12 7 36 90 70 43 62 64 74 50 54 50 35 81 15 83 
63 56 41 24 12 40 77 83 34 78 20 23 21 81 55 94 52 72 87 61 
24 32 36 93 7 31 32 88 7 73 3 86 53 98 50 53 35 32 15 82 
64 95 42 1 43 39 91 71 90 10 3 2 35 73 1 46 77 83 19 68 
20 59 5 28 10 83 38 91 4 5 57 14 35 37 70 26 52 32 80 95 
31 43 10 4 48 71 45 67 3 100 13 72 23 65 79 92 69 13 6 27 
86 59 41 87 71 58 88 46 20 24 58 29 10 16 21 67 2 2 64 52 
54 68 25 55 6 60 35 82 18 85 82 11 26 57 25 23 23 75 76 58 
20 62 65 93 72 16 40 63 5 94 70 22 53 36 99 49 57 67 83 30 
98 30 86 97 35 88 63 100 19 8 9 89 23 34 89 56 48 53 71 72 
70 26 75 47 8 91 2 83 63 52 13 89 65 9 29 88 22 47 65 24 
3.out:
169
1825

2023/8/24 22:20
加载中...