題意很明確,,就是乙個二分圖,求最優匹配,,蛋疼的是第二個要求,有多少個跟原來的匹配,就是優先選擇原來的匹配,跟hdu 2853一樣,將邊的權值擴大1000倍,原來的匹配邊+1,求得的值sum/1000就ok了,原來的匹配個數=sum%1000。。。。用費用流做效果不好,耗時太多
#include#include#includeconst int n=110;
const int inf=0x3fffffff;
using namespace std;
int map[n][n],lx[n],ly[n],sx[n],sy[n],d[n],n,match[n],tch[n];
struct node
p[100],r[100];
int find(int x)
}else d[i]=d[i]>temp?temp:d[i];
}return 0;
}int km()
}sum=0;
for(i=1;i<=n;i++)
sum+=map[match[i]][i];
if(sum<0)return -1;
return sum;
}int main()
map[i][i]+=1;
} y=km();
if(y==-1)printf("oh, i lose my dear seaco!\n");
else printf("%d %.3f%%\n",y/1000,(y%1000)*100.0/n);
}return 0;
}
hdu2255 KM演算法模板
題意 n個人選n個房子,每個人對每個房子分別有乙個出價。乙個人只能買乙個房子,求最大利潤。思路 帶權二分匹配問題,可以用最大費用流做,但是km演算法更高效。include using namespace std const int maxn 303 const int inf 0x3f3f3f3f ...
完美匹配 KM演算法 HDU總結
size medium kidx 的解題報告 img b size medium 首先獻上模板 size b define m 505 define inf 0x3fffffff bool sx m sy m int match m w m m n,m,d,lx m ly m n 左集元素個數 m ...
hdu1533 KM演算法逆向版
思路 原版km演算法求的是最大權值完美匹配,這題要求的是最小權值完美匹配,第一種思路,把邊取負,跑最大權值km演算法,得到的答案取負即可。include using namespace std const int maxn 103 const int inf 0x3f3f3f3f int w max...