Clever King(模板最大全闭合子图)

这题很简单啊…因为很接近模板

不会最大全闭合子图的先去学习…(当然下面我也是从0讲起,不过不一定能看懂)

, 可以发现我们把商品放左边,流量为收益

, ( ) 把矿井放在右边,流量为支出(暂时不考虑商品和商品的依赖关系)

i n f 对应的幸福指数向对应矿井连一条inf的边代表不可割

这样总利润-最小割就是答案

, 因为假设一开始我拿到了所有的收益,现在求最小割

s t 就是求s和t不连通

s , 如果没有割掉s和商品的边,代表选择了某个商品

s t , t , 但是要保证s到t不连通,所以t和商品对应矿石的边都被割去,代表选择了矿石

, . . . 这样,刚好满足了选择商品就选择对应矿石的理念...

现在商品间还有依赖关系

, i n f 很简单,再次简单的连一条流量为inf的边

1 2 , 1 考虑商品1依赖商品2,如果我想选择商品1

1 , 2 那么除了割掉商品1的矿井外,还需要割掉商品2的矿井

1 2 , 而现在商品1和商品2联通,代表二者必须同时被割掉

. . . 画个图就很明显了...

#include <bits/stdc++.h>
using namespace std;
const int maxn=2e5+10;
#define int long long
const int inf=1e14;
int n,m,s,t,sumn,a[maxn],b[maxn],x[5009][5009],dis[maxn];
struct edge{
	int to,nxt,flow;
}d[maxn]; int head[maxn],cnt=1;
void add(int u,int v,int flow){
	d[++cnt]=(edge){v,head[u],flow},head[u]=cnt;
	d[++cnt]=(edge){u,head[v],0},head[v]=cnt;
}
bool bfs()
{
	for(int i=1;i<=t;i++)	dis[i]=0;
	dis[s]=1;
	queue<int>q; q.push( s );
	while( !q.empty() )
	{
		int u=q.front(); q.pop();
		for(int i=head[u];i;i=d[i].nxt )
		{
			int v=d[i].to;
			if( d[i].flow&&dis[v]==0 )
			{
				dis[v]=dis[u]+1;
				if( v==t )	return true;
				q.push( v );
			}
		}
	}
	return false;
}
int dinic(int u,int flow)
{
	if( u==t )	return flow;
	int res=flow;
	for(int i=head[u];i&&res;i=d[i].nxt )
	{
		int v=d[i].to;
		if( dis[v]==dis[u]+1&&d[i].flow)
		{
			int temp=dinic(v,min(res,d[i].flow) );
			if( temp==0 )	dis[v]=0;
			res-=temp;
			d[i].flow-=temp;
			d[i^1].flow+=temp;
		}
	}
	return flow-res;
}
signed main()
{
	int T; cin >> T;
	while( T-- )
	{
		cin >> n >> m;
		s=0,t=n+m+1;
		cnt=1;
		for(int i=s;i<=t;i++)	head[i]=0;
		for(int i=1;i<=n;i++)
		{
			int x; cin >> x;
			sumn+=x;
			add(s,i,x);
		}
		for(int i=1;i<=m;i++)
		{
			int x; cin >> x;
			add(i+n,t,x);
		}
		for(int i=1;i<=n;i++)
		{
			int q,w; cin >> q >> w;
			while( q-- )
			{
				int x; cin >> x;//这是矿石 
				add(i,x+n,inf); 
			}
			while( w-- )
			{
				int x; cin >> x;
				add( i,x,inf ); 
			}
		}
		while( bfs() )	sumn-=dinic(s,inf);
		cout << sumn << endl;
		sumn=0;
	}
}

猜你喜欢

转载自blog.csdn.net/jziwjxjd/article/details/108351829