ACM时代,使用频率最高标程之一---二分匹配,不过当年偶都是自己敲的。

 

最初出自哪里已无从考证,不过这段二分匹配code还蛮经典的:

<textarea cols="72" rows="15" name="code" class="cpp">int nx,ny,m, g[MAXN][MAXN],sy[MAXN],cx[MAXN],cy[MAXN]; int path(int u) { for(int v=1;v&lt;=ny;v++) if(g[u][v] &amp;&amp; !sy[v]){ sy[v]=1; if(!cy[v] || path(cy[v])) { cx[u]=v; cy[v]=u; return 1;} } return 0; } int MaximumMatch() { int i,ret=0; memset(cx,0,sizeof(cx)); memset(cy,0,sizeof(cy)); for(i=1;i&lt;=nx;i++)if(!cx[i]){memset(sy,0,sizeof(sy));ret+=path(i);} return ret; } //匈牙利算法 p.s.:sx,sy is used for marking whether is node is visited, in fact, sy is useless. cx[x] means x match cx[x], cy[y] means cy[y] match y</textarea>

---基本的匈牙利算法实现,其实感觉这种东西,理解的话自己敲 其实也蛮快的,而且要灵活的多.

不过网络赛的话贴下可以节约code的时间.现场赛感觉就是完全没必要了。

你可能感兴趣的:(ACM时代,使用频率最高标程之一---二分匹配,不过当年偶都是自己敲的。)