Plug for UNIX UVA - 753

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<algorithm>
#include<map>
#include<vector>
#include<cstring>
#include<queue>
using namespace std;
typedef long long ll;
map<string,int> id;
int st,ed;
int cnt;

const int maxn=410;
const int inf=0x3f3f3f3f;
/*
要注意格式和数量,
因为有转换器,所以最多会有400种可能性 
*/

struct Edge{
	int u,v,cap,flow;
	Edge(int _u,int _v,int c,int f):u(_u),v(_v),cap(c),flow(f){	}
};

struct EK{
	int n,m;
	vector<Edge> edges;
	vector<int> G[maxn];
	int a[maxn];
	int p[maxn];
	
	void init(int n){
		for(int i=0;i<n;i++)G[i].clear();
		edges.clear();
	}
	void add_edge(int u,int v,int c){
		edges.push_back(Edge(u,v,c,0));
		edges.push_back(Edge(v,u,0,0));
		m=edges.size();
		G[u].push_back(m-2);
		G[v].push_back(m-1);
	}
	
	int MaxFlow(int s,int t){
		int flow=0;
		for(;;){
			memset(a,0,sizeof(a));
			queue<int> q;
			q.push(s);
			a[s]=inf;
			while(!q.empty()){
				int x=q.front();q.pop();
				for(int i=0;i<G[x].size();i++){
					Edge& e=edges[G[x][i]];
					if(!a[e.v]&&e.cap>e.flow){
						p[e.v]=G[x][i];
						a[e.v]=min(a[x],e.cap-e.flow);
						q.push(e.v);
					}
				}
				if(a[t])break;
			}
			if(!a[t])break;
			for(int u=t;u!=s;u=edges[p[u]].u){
				edges[p[u]].flow+=a[t];
				edges[p[u]^1].flow-=a[t];
			}
			flow+=a[t];
		}
		return flow;
	}
}ek;

void init(){
	id.clear();
	cnt=0;
	st=cnt++;
	ed=cnt++;
	ek.init(maxn-1);
}

int main(){
	ios::sync_with_stdio(false);
	int T;
	int flag=0;
	cin>>T;
	while(T--){
		init();
		
		if(flag)cout<<endl;
		flag++;
		
		int n;
		cin>>n;
		for(int i=1;i<=n;i++){
			string s;
			cin>>s;
			if(!id[s]) id[s]=cnt++;
			ek.add_edge(id[s],ed,1);
		}
		
		int m;
		cin>>m;
		for(int i=1;i<=m;i++){
			string s1,s2;
			cin>>s1>>s2;
			if(!id[s2]) id[s2]=cnt++;
			ek.add_edge(st,id[s2],1);
		}
		
		int k;
		cin>>k;
		for(int i=1;i<=k;i++){
			string s1,s2;
			cin>>s1>>s2;
			if(!id[s1]) id[s1]=cnt++;
			if(!id[s2]) id[s2]=cnt++;
			ek.add_edge(id[s1],id[s2],inf);
		}
		
		int ans=ek.MaxFlow(st,ed);
		
		cout<<m-ans<<endl;
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_36424540/article/details/80644163