这道题有重边且点的规模较小
所以用邻接矩阵存图是和我英雄所见略同合理的
但是这道题的输入有点特殊
左部点从 1 至 n 编号,右部点从 1 至 m 编号。
每行两个整数 u,v,表示存在一条连接左部点 u 和右部点 v 的边。
所以存图逻辑应该是这样:
for(int i=1;i<=e;++i){
int u,v; cin>>u>>v;
G[u][v]=1;
}
遍历逻辑应该是这样:
int dfs(int u,int tg){
if(vis[u]==tg) return 0;
vis[u]=tg;
for(int v=1;v<=m;++v){
if(!g[u][v]) continue;
if(mch[v]==0 or dfs(mch[v],tg)){
mch[v]=u;
return 1;
}
}
return 0;
}