【洛谷P3386】二分图最大匹配
鬼知道为什么dfs会无缘无故把vis变成1啊喂
虽然去掉memset能过6个点,加上就只能过2个,但是我还是觉得应该是代码这个样子……
#include <bits/stdc++.h>
using namespace std;
int vis[510]={0},d[510][510]={0},linkk[510]={0};
//vis 右是否访问 d 边 link 右边的匹配,即左边
int n,m,e,ans=0;
int dfs(int u){//u 左
for(int i=1;i<=m;i++){
if(d[u][i]==1&&vis[i]==0){
vis[i]=1;
if(linkk[i]==0||dfs(linkk[i])==0){
linkk[i]=u;
return 1;
}
}
}
return 0;
}
int main(){
int a,b;
cin>>n>>m>>e;
for(int i=0;i<e;i++){
cin>>a>>b;
d[a][b]=1;
}
memset(linkk,0,sizeof(linkk));
for(int k=1;k<=n;++k){
memset(vis,0,sizeof(vis));
if(dfs(k)==1)
ans++;
}
cout<<ans;
return 0;
}
其他题不会,救命