网络流 WA0分求助awa
查看原帖
网络流 WA0分求助awa
956129
z_z_b_楼主2024/7/5 07:59

(我就把EK转成dinic,结果连20分都不配拥有了awa)

#include<bits/stdc++.h>
#define int long long
using namespace std;

namespace io
{
	inline int read(){int x=0,w=0;char c=0;while(!isdigit(c))w|=c=='-',c=getchar();while(isdigit(c))x=(x<<3)+(x<<1)+(c^48),c=getchar();return w?-x:x;}
	template<typename T>inline void write(T x){if(x<0)putchar('-'),x=-x;if(x>9)write(x/10);putchar(x%10+'0');}
	template<typename T>inline void write_(T x){write(x),putchar(' ');}
	template<typename T>inline void writeln(T x){write(x),putchar('\n');}
}
using namespace io;

const int N=3e6+5;
bool v[N];
int n,m,s,t,S,T,ans,top=1,cnt,dis[N],d[N],h[N],now[N],b[N];
struct node{int nx,to,w,d;}e[N];

void add(int u,int v,int w,int d)
{
	e[++top]=(node){h[u],v,w,-d},h[u]=top;
	e[++top]=(node){h[v],u,0,d},h[v]=top;
}

inline bool bfs()
{
	memset(dis,-100,sizeof dis);//注意,一定要小 
	memset(v,0,sizeof v);
	memset(d,0,sizeof d);
	queue<int>q;
	q.push(S);
	dis[S]=0,v[S]=d[S]=1,now[S]=h[S];
	while(!q.empty())
	{
		int u=q.front();
		q.pop();
		v[u]=0;
		for(int i=h[u];i;i=e[i].nx)
		{
			int to=e[i].to,w=e[i].w,k=e[i].d;
			if(w>0&&dis[to]<dis[u]+k)
			{
				dis[to]=dis[u]+k;
				d[to]=d[u]+1;
				now[to]=h[to];
				if(!v[to]) q.push(to),v[to]=1;
			}
		}
	}
	if(dis[T]<0) return 0;
	else return 1;
}

int dfs(int u,int flow)
{
	if(u==T) return flow;
	for(int i=now[u];i;i=e[i].nx)
	{
		int to=e[i].to,w=e[i].w,c=e[i].d,k;
		if(d[to]!=d[u]+1||!w||dis[to]!=dis[u]+c) continue;
		if(!(k=dfs(to,min(flow,w)))) continue;
		e[i].w-=k;
		e[i^1].w+=k;
		ans+=c;
		now[u]=i;
		return k;
	}
    return 0;
}

signed main()
{
	n=read();
	s=0,t=n+1;
	S=n+2,T=n+3;
	for(int i=1;i<=n;i++)
	{
		int t=read();
		for(int j=1;j<=t;j++)
		{
			int v=read(),w=read();
			++b[v],--b[i];
			ans-=w;
			add(i,v,INT_MAX,w);
		}
	}
	for(int i=2;i<=n;i++) add(i,t,INT_MAX,0);
	add(t,s,INT_MAX,0);
	for(int i=1;i<=n+1;i++)
	{
		if(b[i]>0) add(S,i,b[i],0);
		if(b[i]<0) add(i,T,-b[i],0);
	}
	while(bfs())while(dfs(S,INT_MAX));
	write(-ans);
	return 0;
}
2024/7/5 07:59
加载中...