但是,我的匈牙利过了
by hysczdkf @ 2023-11-25 10:34:39
与楼主错误一致,改后发现是如果第一遍 dfs 配对了,但是第二遍 dfs 配对不了,此时应该不修改。但是第一遍 dfs 中已经改过了,此时应该改回来。
by hysczdkf @ 2023-11-25 10:38:18
代码如下:
by hysczdkf @ 2023-11-25 10:38:41
80分:
```
bool dfs(int me){
if(flag[me]==1){
return 0;
}
flag[me]=1;
for(int i=0;i<vec[me].size();i++){
if(pd[vec[me][i]]==0||dfs(pd[vec[me][i]],ydzr)==1){
pd[vec[me][i]]=me;
return 1;
}
}
return 0;
}
```
by hysczdkf @ 2023-11-25 10:40:28
100分:
```
bool dfs(int me,int ydzr){
if(flag[me]==1){
return 0;
}
flag[me]=1;
for(int i=0;i<vec[me].size();i++){
if(pd[vec[me][i]]==0||dfs(pd[vec[me][i]],ydzr)==1){
pd[vec[me][i]]=me;
pdd=vec[me][i];
return 1;
}
}
return 0;
}
```
之后在 main 里有:
```
for(int i=1;i<=n;i++){
memset(flag,0,sizeof(flag));
pdd=0;
if(dfs(i,i)==1){
memset(flag,0,sizeof(flag));
if(dfs1(i)==1){
ans++;
cout<<i<<endl;
}
else{
pd[pdd]=0;
}
}
}
```
by hysczdkf @ 2023-11-25 10:41:48
@[lonely_cyx](/user/276588) 希望能帮到您
by hysczdkf @ 2023-11-25 10:43:02