bzoj1191: [HNOI2006]超级英雄Hero
二分图最大顺序匹配。 拿题目编号和锦囊编号建二分图,跑匈牙利算法。
#include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn = 2000 + 10; const int maxm = 4000 + 10; int n,m,e; int v[maxn],next[maxm],h[maxn]; int p[maxn]; bool vis[maxn]; void add(int a,int b) { v[e] = b; next[e] = h[a]; h[a] = e++; } bool find(int u) { if(vis[u]) return false; vis[u] = true; for(int i = h[u]; ~i; i = next[i]) if(!p[v[i]] || find(p[v[i]])) { p[v[i]] = u; return true; } return false; } int main() { scanf("%d%d",&n,&m); memset(h,-1,sizeof(h)); for(int i = 1,a,b; i <= m; i++) { scanf("%d%d",&a,&b); add(i,a); add(i,b); } int res; for(res = 1; res <= m; res++) { memset(vis,0,sizeof(vis)); if(!find(res)) break; } printf("%d\n",res-1); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步