题意:将母牛和小牛匹配
J - Ginger的牧场 | SDUT OnlineJudgehttps://acm.sdut.edu.cn/onlinejudge3/contests/4053/problems/J需要将字符串用map映射成对应的数(离散化的方式)
#include <bits/stdc++.h>
#define int long long
#define Close ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
using namespace std;
const int N=105;
const int INF=0x3f3f3f3f;
const int mod=1e9+7;
typedef pair<int,int> pii;
vector<pii> q(N);
//vector<int> g[N];
set<int> s1;
set<int> s2;
map<string,int> mp1;
map<string,int> mp2;
map<string,vector<string>> mpp;
unordered_map<int,int> ump;
map<pair<double,double>,int> mmp;
int n,m,idx,a,b,c,d,cnt1,cnt2;
string x,y;
int match[N],g[N][N],tx[N],ty[N];
bool st[N];
int getnum1(string s)
{
if(!mp1.count(s)) mp1[s]=++cnt1;
else return mp1[s];
return mp1[s];
}
int getnum2(string s)
{
if(!mp2.count(s)) mp2[s]=++cnt2;
else return mp2[s];
return mp2[s];
}
bool find(int u)
{
for(auto i:s2)
{
if(!st[i]&&g[u][i])
{
st[i]=1;
if(!match[i]||find(match[i]))
{
match[i]=u;
return true;
}
}
}
return false;
}
void solve()
{
cin>>a>>b>>m;
while(m--)
{
cin>>x>>y;
getchar();
int xx=getnum1(x),yy=getnum2(y);
s1.insert(xx),s2.insert(yy);
g[xx][yy]=1;
}
int res=0;
for(auto i:s1)
{
memset(st,0,sizeof st);
if(find(i)) res++;
}
cout<<res;
}
signed main()
{
Close
int T;
T=1;
//cin>>T;
while(T--)
{
solve();
}
return 0;
}