📄 perfect-match.cpp
字号:
bool dfs(int s)
{
int i;
cx[s]=true;
for(i=0;i<cnt;i++)
if(!cy[i]&& x[s]+y[i]==w[s][i])
{
cy[i]=true;
if(match[i]==-1||dfs(match[i]))
{
match[i]=s;
return true;
}
}
return false;
}
void max_match()
{
int i,j,k;
int d,tmp;
memset(match,0xff,sizeof(match));
for(i=0;i<cnt;i++)
{
while(true)
{
memset(cx,false,sizeof(cx));
memset(cy,false,sizeof(cy));
if(dfs(i))break;
d = 0x3fffffff;
for(j=0;j<cnt;j++)
if(cx[j])
for(k=0;k<cnt;k++)
if(!cy[k])
d = d>(tmp=x[j]+y[k]-w[j][k]))?tmp:d;
for(j=0;j<cnt;j++){
if(cx[j])x[j]-=d;
if(cy[j])y[j]+=d;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -