//愿天堂没有TLE
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n;
int ji=1;
int ans,cnt;
const int maxn=1000010;
inline int read()
{
register int X=0; bool flag=1; char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-') flag=0; ch=getchar();}
while(ch>='0'&&ch<='9') {X=(X<<1)+(X<<3)+ch-'0'; ch=getchar();}
if(flag) return X;
return ~(X-1);
}
inline void write(register int X)
{
if(X<0) {X=~(X-1); putchar('-');}
if(X>9) write(X/10);
putchar(X%10+'0');
}
int mmax;
struct h
{
int from,to;
}edge[2*maxn];
int head[2*maxn];
int use[maxn];
int ma[maxn];
void add_edge(register int from,register int to)
{
edge[++cnt].from=head[from];
edge[cnt].to=to;
head[from]=cnt;
}
bool find(register int now)
{
for(register int i=head[now];i;i=edge[i].from)
{
register int pro=edge[i].to;
if(!use[pro])
{
use[pro]=1;
if(!ma[pro]||find(ma[pro]))
{
ma[pro]=now;
return 1;
}
}
}
return 0;
}
int main()
{
n=read();
for(register int i=1;i<=n;i++)
{
register int s1,s2;
s1=read();
s2=read();
if(s1<=n)
{
add_edge(s1,i);
}
if(s2<=n)
{
add_edge(s2,i);
}
}
for(register int i=1;i<=n;i++)
{
memset(use,0,sizeof(use));
if(!find(i))
{
write(i-1);
return 0;
}
}
write(n);
return 0;
}
我直接去世了,并调了一下午,加了快读快输,卡常了一大堆,最后发现把use数组改成bool型就过了???