萌新求助此题正解

P1402 酒店之王

但是,我的匈牙利过了
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


|