KM algorithm
1#include <bits/stdc++.h>2 #defineN 15003 #defineINF 9999999994 using namespacestd;5 inta[n],bs[n],nx=0, ny=0, K;6 intLinky[n],lx[n],ly[n],slack[n];7 intVisx[n],visy[n],w[n][n];8 intMinintAintb) {return(a<b)?a:b;}9 intFindintx) {Tenvisx[x]=1; One for(inty=1; y<=ny;y++){ A if(Visy[y])Continue; - intt=lx[x]+ly[y]-W[x][y]; - if(t==0) {visy[y]=1; the if(linky[y]==-1||find (Linky[y])) { -Linky[y]=x;return 1; - } - } + Else if(slack[y]>t) slack[y]=T; - } + return 0; A } at intkm () { -memset (linky,-1,sizeof(Linky)); -memset (Ly,0,sizeof(ly)); - for(intI=1; i<=nx;i++) lx[i]=-inf; - for(intI=1; i<=nx;i++) for(intj=1; j<=ny;j++)if(W[i][j]>lx[i]) lx[i]=W[i][j]; - for(intx=1; x<=nx;x++){ in for(intI=1; i<=ny;i++) -slack[i]=inf; to while(1){ +memset (VISX,0,sizeof(VISX)); -memset (Visy,0,sizeof(Visy)); the if(Find (x)) Break; * intD=inf; $ for(intI=1; i<=ny;i++)if(!visy[i]&&d>slack[i]) d=Slack[i];Panax Notoginseng for(intI=1; i<=nx;i++)if(Visx[i]) lx[i]-=D; - for(intI=1; i<=ny;i++)if(Visy[i]) Ly[i]+=d;Elseslack[i]-=D; the } + } A intresult=0; the for(intI=1; i<=ny;i++) + if(linky[i]>-1) result+=W[linky[i]][i]; - returnresult; $ } $ intMain () { -scanf"%d%d%d",&nx,&ny,&k); - for(intI=1; i<=k;i++){ the intA,B,C;SCANF ("%d%d%d",&a,&b,&c); -w[a][b]=C;Wuyi}printf ("%d\n", km ()); the return 0; -}
View Code
Hungarian algorithm
1#include <cstdio>2#include <cstring>3 #defineN 10104 using namespacestd;5 intMap[n][n];6 intMax,x1,m,y1,tot,ans;7 intUsed[n],link[n];8 intFindintt)9 {Ten for(intI=1; i<=y1;i++) One { A if(used[i]==0&&map[t][i]==1) - { -used[i]=1; the if(link[i]==0||find (Link[i])) - { -link[i]=T; - return 1; + } - } + } A return 0; at } - intMain () - { -scanf"%d%d%d%d",&max,&x1,&y1,&m); -max++;tot=x1+Y1; - for(intI=1; i<=m;i++) in { - intb; toscanf"%d%d",&a,&b); +map[a][b]=1; - } the for(intI=1; i<=y1;i++) link[i]=0; * for(intI=1; i<=x1;i++) $ {Panax Notoginseng for(intI=1; i<=y1;i++) used[i]=0; - if(Find (i)) theans++; + } Aprintf"%d\n", (Max<tot-ans)? max:tot-ans); the return 0; +}
View Code
Paste Board Series _1-km algorithm, Hungarian algorithm