帮忙rp++
查看原帖
帮忙rp++
1064275
kmltz楼主2024/8/14 20:44

实在不知道哪错了大佬们帮忙调一下吧感谢!!!

using namespace std;
#include<bits/stdc++.h>
#define ll long long
ll n,m,s,t;	ll u,v,w;const ll N=500;
ll f,d,nn;
ll ff,dd;
ll ans=0;

struct edge{
	ll to,nxt,val;
}ed[N<<2];ll head[N];ll cntt=1;
ll dis[1000];
ll pre[1000];ll vis[1000];
void add_t(ll u,ll v,ll w){
	ed[++cntt].nxt=head[u];
	ed[cntt].to=v;ed[cntt].val=w;head[u]=cntt;
	ed[++cntt].nxt=head[v];
	ed[cntt].to=u;ed[cntt].val=0;
	head[v]=cntt;
}
int bfs(){
    s=401;t=402;
	memset(vis,0,sizeof(vis));
	queue<ll> q;
	q.push(s);
	vis[s]=1;
	dis[s]=2005020600;
	while(!q.empty()){
		ll x=q.front();
		q.pop();
		for(ll i=head[x];i;i=ed[i].nxt){
			if(ed[i].val==0) continue;
			ll v=ed[i].to;
			if(vis[v]==1)continue;
			dis[v]=min(dis[x],ed[i].val);
			pre[v]=i;q.push(v);
			vis[v]=1;

			if(v==t) return 1;		
		}
	}
	return 0;
	
	
}
void upd(){
	
	ll x=t;
	while(x!=s){
		int v=pre[x];
		ed[v].val-=dis[t];
		ed[v^1].val+=dis[t];
		x=ed[v^1].to;
	}
	ans+=dis[t];
	return;
}
int main(){
	ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	cin>>f>>d>>n;
	for(int i=1;i<=f;i++){
			add_t(401,i,1);
	}
	for(int i=1;i<=n;i++){
		cin>>ff>>dd;
		for(int j=1;j<=ff;j++){
			ll t;cin>>t;
			add_t(t,i+100,1);
		}
		for(int k=1;k<=dd;k++){
			ll t;cin>>t;
			add_t(i+200,t+300,1);
		}
		add_t(i+100,i+200,1);
	}
	for(int i=1;i<=d;i++){
		add_t(i+300,402,1);
	}
	n=f+d+2*nn+2;
	while(bfs()!=0){
		upd();
	}
	
	cout<<ans;
	

} 
2024/8/14 20:44
加载中...