Lightoj 1198 (KM模板题)
来源:互联网 发布:歌曲消音伴奏软件 编辑:程序博客网 时间:2024/06/05 20:57
套用KM模板就行了,一道模板题,注意建图就行。
#include<iostream>#include<cstdlib>#include<cstdio>#include<cstring>#include<algorithm>#define N 60using namespace std;int vx[N],vy[N],lx[N],ly[N],link[N],mat[N][N];int n;int dfs(int t){ int i; vx[t]=1; for(i=1;i<=n;i++) { if(vy[i]==0&&lx[t]+ly[i]==mat[t][i]) { vy[i]=1; if(link[i]==-1||dfs(link[i])) { link[i]=t; return 1; } } } return 0;}void KM(){ int i,j,t,k; memset(lx,0,sizeof(lx)); memset(ly,0,sizeof(ly)); for(i=1; i<=n; i++) for(j=1; j<=n; j++) lx[i]=max(lx[i],mat[i][j]); for(i=1; i<=n; i++) { while(1) { memset(vx,0,sizeof(vx)); memset(vy,0,sizeof(vy)); if(dfs(i)) break; else { t=9999999; for(j=1; j<=n; j++) if(vx[j]) for(k=1; k<=n; k++) if(vy[k]==0&&lx[j]+ly[k]-mat[j][k]<t) t=lx[j]+ly[k]-mat[j][k]; for(j=1;j<=n;j++) { if(vx[j]) lx[j]-=t; if(vy[j]) ly[j]+=t; } } } }}int main(){ int i,j,t,ans,a[N],b[N]; scanf("%d",&t); int k=0; while(t--) { scanf("%d",&n); for(i=1; i<=n; i++) scanf("%d",&a[i]); for(i=1; i<=n; i++) scanf("%d",&b[i]); memset(link,-1,sizeof(link)); memset(mat,0,sizeof(mat)); for(i=1; i<=n; i++) for(j=1; j<=n; j++) { if(a[i]>b[j]) mat[i][j]=2; if(a[i]==b[j]) mat[i][j]=1; } KM(); ans=0; for(i=1; i<=n; i++) ans+=mat[link[i]][i]; printf("Case %d: %d\n",++k,ans); } return 0;}
0 0
- Lightoj 1198 (KM模板题)
- lightoj 1011 Marriage Ceremonies (KM模板题)
- HDU 2255(KM 模板题)
- HDU 3722 KM模板题
- POJ3686-KM匹配模板题
- hdu2255+poj3565(km模板题)
- KM算法+模板(二)
- KM算法(汇总+模板)
- KM算法模板(hdu2255)
- HDU2225奔小康赚大钱(KM匹配模板题)
- HDU 2255 奔小康赚大钱 (KM算法 模板题)
- HDU 2255 奔小康赚大钱(KM算法模板题)
- KM模板
- KM模板
- km 模板
- KM模板
- KM模板
- KM模板
- iOS开发之第三方分享QQ分享,史上最新最全第三方分享QQ方式实现
- stdafx.cpp用处
- 循环链表——单链表的改进之一
- NSThread类三种创建线程的方式
- activity堆栈式管理
- Lightoj 1198 (KM模板题)
- jquery-chosen中改变文字匹配模式
- C语言进制问题
- Java File类的详解
- hdu 2546 饭卡
- Linux -- review
- Android加载动画系列——ChromeLogoLoadingAnim
- hdu 2612 Find a way
- 1061:青蛙的约会