#include<iostream>
#include<cstdio>
#include<cstring>
const int maxn = 105;
using namespace std;
int n,map[maxn][maxn];
char adam[maxn][5],eve[maxn][5];
int link[maxn],vis[maxn];
int num(char a)
{
if(a>='1'&&a<='9')
return a-'0';
if(a=='T')return 10;
if(a=='J')return 11;
if(a=='Q')return 12;
if(a=='K')return 13;
if(a=='A')return 14;
}
int big(char a)
{
if(a=='C')return 1;
if(a=='D')return 2;
if(a=='S')return 3;
if(a=='H')return 4;
}
int can(int u)
{
for(int v = 0; v < n; v++)
{
if(map[u][v]&&!vis[v])
{
vis[v] = 1;
if(link[v]==-1 || can(link[v]))
{
link[v] = u;
return 1;
}
}
}
return 0;
}
int MaxPath()
{
memset(link,-1,sizeof(link));
int ret = 0;
for(int i = 0; i < n; i++)
{
memset(vis, 0,sizeof(vis));
if(can(i))
ret++;
}
return ret;
}
int main()
{
int t;
int x,y,xi,yi;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
memset(map, 0, sizeof(map));
for(int i = 0; i < n; i++)
{
scanf("%s",adam[i]);
}
for(int i = 0; i < n; i++)
{
scanf("%s",eve[i]);
x = num(eve[i][0]);
xi = big(eve[i][1]);
for(int j = 0; j < n; j++)
{
y = num(adam[j][0]);
yi = big(adam[j][1]);
if(x>y || (x==y&&xi>yi))
map[i][j] = 1;
}
}
printf("%d\n",MaxPath());
}
return 0;
}
二分匹配_HDU_1525
最新推荐文章于 2015-08-28 13:05:47 发布