这个题目,我们很容易的看出来这是个二分图匹配,每个装备和两个属性连边,然后跑二分图匹配就行了
struct node {
int next,to;
} e[N<<1];
int h[N<<1],n,m,cnt;
#define add(u,v) e[++cnt].next=h[u],e[cnt].to=v,h[u]=cnt;
#define QXX(u) for(int i=h[u],v;v=e[i].to,i;i=e[i].next)
int vis[N],book[N];
bool dfs(int now){
if(vis[now]) return 0;
vis[now]=1;
QXX(now) {
if(!book[v]||dfs(book[v])){
book[v]=now;
return 1;
}
}
return 0;
}
int ans;
int main() {
n=read();
FOR(i,1,n) {
int x=read(),y=read();
add(x,i) add(y,i)
}
FOR(i,1,10000){
memset(vis,0,sizeof vis);
if(dfs(i)) ans++;
else break;
}
cout<<ans;
return 0;
}