UVA11383 Golden Tiger Claw

题目

UVA11383 Golden Tiger Claw

做法

\(KM\)好题啊,满足所有边\(l(x)+l(y)≥w(x,y)\)(个人理解,如不对请及时留言),这样能满足\(\sum\limits_i^n(l(x)+l(y))\)最小值

My complete code

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL maxn=1e3,inf=0x3f3f3f3f;
LL n,mi;
LL lx[maxn],ly[maxn],w[maxn][maxn],mat[maxn];
bool S[maxn],T[maxn];
bool Match(LL u){
    S[u]=true;
    for(LL i=1;i<=n;++i){
        if(!T[i]){
            LL tmp(lx[u]+ly[i]-w[u][i]);
            if(!tmp){
                T[i]=true;
                if(!mat[i] || Match(mat[i])){
                    mat[i]=u;
                    return true;
                }
            }
            else
                mi=min(mi,tmp);
        }
    }return false;
}
inline void Update(){
    for(LL i=1;i<=n;++i)
        if(S[i]) lx[i]-=mi;
    for(LL i=1;i<=n;++i)
        if(T[i]) ly[i]+=mi;
}
inline void KM(){
    for(LL i=1;i<=n;++i){
        mat[i]=lx[i]=ly[i]=0;
        for(LL j=1;j<=n;++j)
            lx[i]=max(lx[i],w[i][j]);
    }
    for(LL i=1;i<=n;++i){
        while(true){
            for(LL i=1;i<=n;++i)
                S[i]=T[i]=false;
            mi=inf;
            if(Match(i)) break;
            else Update();
        }
    }
}
int main(){
    while(scanf("%d",&n)!=EOF&&n){
        for(LL i=1;i<=n;++i)
            for(LL j=1;j<=n;++j)
                cin>>w[i][j];
        KM();
        LL ans(0);
        for(LL i=1;i<=n;++i)
            ans+=lx[i];
        for(LL i=1;i<=n;++i)
            ans+=ly[i];

        printf("%d",lx[1]);
        for(LL i=2;i<=n;++i)
            printf(" %d",lx[i]);printf("\n");
        printf("%d",ly[1]);
        for(LL i=2;i<=n;++i)
            printf(" %d ",ly[i]);printf("\n");

        printf("%d\n",ans);
    }return 0;
}

原文地址:https://www.cnblogs.com/y2823774827y/p/10349305.html

时间: 2024-11-06 07:30:22

UVA11383 Golden Tiger Claw的相关文章

uva 11383 Golden Tiger Claw (KM算法)

uva 11383 Golden Tiger Claw 题目大意:给定一个N×N的矩阵,每个格子里都有一个正整数w(i,j).你的任务是给每行确定一个整数row(i), 每列也确定一个整数col(i),使得对于格子(i,j),w(i,j)<=row(i)+col(j).所有row(i)和col(j)的总和最小. 解题思路:KM算法. #include <cstdio> #include <cstring> #include <algorithm> #include

UVA 11383 Golden Tiger Claw

Golden Tiger Claw Time Limit: 8000ms Memory Limit: 131072KB This problem will be judged on UVA. Original ID: 1138364-bit integer IO format: %lld      Java class name: Main Omi, Raymondo, Clay and Kimiko are on new adventure- in search of new Shen Gon

UVA 11383 - Golden Tiger Claw(二分图完美匹配扩展)

UVA 11383 - Golden Tiger Claw 题目链接 题意:给定每列和每行的和,给定一个矩阵,要求每个格子(x, y)的值小于row(i) + col(j),求一种方案,并且所有行列之和的和最小 思路:A二分图完美匹配的扩展,行列建二分图,权值为矩阵相应位置的值,做一次KM算法后,所有顶标之和就是最小的 代码: #include <cstdio> #include <cstring> #include <cmath> #include <algor

UVA 11383 Golden Tiger Claw 金虎爪(KM算法)

题意:给一个n*n的矩阵,每个格子中有正整数w[i][j],试为每行和每列分别确定一个数字row[i]和col[i],使得任意格子w[i][j]<=row[i]+col[j]恒成立.先输row,再输出col,再输出全部总和(总和应尽量小). 思路: KM算法中的顶标就是保持了Lx[i]+ly[j]>=g[i][j]再求最大权和匹配的,但这个最大权和并没有关系.我们可以将row[i]看成一个男的,col[i]看成一个女的,这样男女的总数就相等.一般来说,Lx[i]或Ly[i]仅需要取该行/列中最

训练指南 UVA - 11383(KM算法的应用 lx+ly &gt;=w(x,y))

layout: post title: 训练指南 UVA - 11383(KM算法的应用 lx+ly >=w(x,y)) author: "luowentaoaa" catalog: true mathjax: true tags: - KM算法 - 训练指南 Golden Tiger Claw UVA - 11383 题意 给一个n*n的矩阵,每个格子中有正整数w[i[j],试为每行和每列分别确定一个数字row[i]和col[i],使得任意格子w[i][j]<=row[i

scott/tiger is locked 解决办法

在plsql developer中要是以scott/tiger登录时提示ora-28000 the account is locked. 解决办法: 新装完Oracle10g后,用scott/tiger测试,会出现以下错误提示: oracle10g the account is locked oracle10g the password has expired 原因:默认Oracle10g的scott不能登陆. 解决: (1)conn sys/sys as sysdba; //以DBA的身份登录

hdoj 3820 Golden Eggs 【双二分图构造最小割模型】

Golden Eggs Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 505    Accepted Submission(s): 284 Problem Description There is a grid with N rows and M columns. In each cell you can choose to put

XTU1173:Five Tiger(模拟)

题目描述 五虎棋是流传在东北民间的一种游戏,GG小的时候,经常被表哥虐得很惨. 由于各个地区的规则可能不大相同,并且GG的回忆不一定很准,所以,如果规则和你平常玩的的有冲突,请以这里为主. 棋盘是横五条,纵五条直线,形成25个交叉点,双方轮流把棋子放到交叉点上 (由于所需各自和棋子数目不多,才12+13,GG小的时候,用的是象棋的棋盘和棋子,真的用大棋盘很爽~~~) 当双方把棋盘下满之后(先手下了13个棋子,后手下了12个棋子),根据双方摆成的阵型来算分. (当然,算分之后,还有提掉对方相应个数

龙书(Dragon book) +鲸书(Whale book)+虎书(Tiger book)

1.龙书(Dragon book)书名是Compilers: Principles,Techniques,and Tools作者是:Alfred V.Aho,Ravi Sethi,Jeffrey D.Ullman国内所有的编译原理教材都是抄的它的,而且只是抄了最简单的前端的一些内容.龙书中文版第一版龙书英文版第二版 2.鲸书(Whale book)书名是:Advanced Compiler Design and Implementation作者是:Steven S.Muchnick也就是高级编译