RT,最一开始我写的 DFS 是这样的:
int y;
bool DFS(int x)
{
for(R int i=head[x];i;i=r[i].nex)
{
if(!vis[y=r[i].to])
{
vis[y]=1;
if(!match[y] or DFS(match[y]))
{
match[y]=x;
match[x]=y;
return 1;
}
}
}
return 0;
}
这样的话只能过一个点(甚至连样例都过不了)
然后后来我把 y 的赋值拿了出来,就过了?
bool DFS(int x)
{
for(R int i=head[x];i;i=r[i].nex)
{
int y=r[i].to;
if(!vis[y])
{
vis[y]=1;
if(!match[y] or DFS(match[y]))
{
match[y]=x;
match[x]=y;
return 1;
}
}
}
return 0;
}
不知道有什么区别,于是求助(
全部代码放在这里了