#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int MAXN=1000005;
int vis[MAXN];
int fs[MAXN],nxt[MAXN],to[MAXN];
int cnt;
int n;
int maxn;
int p[MAXN];
int ans;
int tag;
int x1,x2;
void addedge(int uu,int tt)
{
to[++cnt]=tt;
nxt[cnt]=fs[uu];
fs[uu]=cnt;
}
bool dfs(int x)
{
for(int i=fs[x];i;i=nxt[i])
{
int y=to[i];
if(vis[y]==tag) continue;
vis[y]=tag;
if(!p[y])
{
p[y]=x;
return true;
}
if(dfs(p[y]))
{
p[y]=x;
return true;
}
}
return false;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d%d",&x1,&x2);
maxn=max(maxn,max(x1,x2));
addedge(x1,i);
addedge(x2,i);
}
for(int i=1;i<=maxn;i++)
{
tag++;
if(dfs(i))
{
ans++;
}
else
{
printf("%d",ans);
return 0;
}
}
printf("%d",ans);
return 0;
}
匈牙利+时间戳优化 然而还是过不了最后两个点。。。