HDU 3523 Image copy detection(KM)

原创 2017年01月03日 20:01:43
#include<iostream>
using namespace std;
const int maxn=100+5;
int w[maxn][maxn],n,m;
int lx[maxn],ly[maxn];
int Left[maxn];
bool s[maxn],t[maxn];
int a[maxn][maxn];
bool match(int i)
{
    s[i]=true;
    for(int j=1;j<=n;j++) if(lx[i]+ly[j]==w[i][j]&&!t[j]){
        t[j]=true;
        if(!Left[j]||match(Left[j])){
            Left[j]=i;
            return true;
        }
    }
    return false;
}
void update()
{
    int a=(1<<30);
    for(int i=1;i<=n;i++) if(s[i])
        for(int j=1;j<=n;j++) if(!t[j])
            a=min(a,lx[i]+ly[j]-w[i][j]);
    for(int i=1;i<=n;i++){
        if(s[i]) lx[i]-=a;
        if(t[i]) ly[i]+=a;
    }
}
void KM()
{
    for(int i=1;i<=n;i++){
        Left[i]=lx[i]=ly[i]=0;
        for(int j=1;j<=n;j++)
            lx[i]=max(lx[i],w[i][j]);
    }
    for(int i=1;i<=n;i++){
        for(;;)
        {
            for(int j=1;j<=n;j++) s[j]=t[j]=0;
            if(match(i)) break;else update();
        }
    }
}
int main()
{
    int T;
    scanf("%d",&T);
    for(int i=1;i<=T;i++)
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=m;i++)
            for(int j=1;j<=n;j++)
                scanf("%d",&a[i][j]);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
            {
                w[i][j]=0;
                for(int k=1;k<=m;k++)
                    w[i][j]-=abs(a[k][i]-j);
            }
        KM();
        int ans=0;
        for(int i=1;i<=n;i++) ans+=w[Left[i]][i];
        printf("Case #%d: %d\n",i,-ans);
    }
    return 0;
}

相关文章推荐

【KM匹配】 HDOJ 3523 Image copy detection

建出邻接矩阵后权值取反,即可求出最小代价。。。。 #include #include #include #include #include #include #include ...

HDU 3523 最小费用流或KM

点击打开链接 题意:这题的题意隐晦的可以,中间不说了直接说求什么,求的是你画一张照片,照片有n个元素,1到n每个出现一次,问你对于上面的m张照片,如何分配你画的1到n使得题目中的式子的值最小,解释第二...
  • Dan__ge
  • Dan__ge
  • 2016年06月20日 15:53
  • 658

Efficient Dense-Field Copy-Move Forgery Detection----CMFD论文笔记

一、idea从何而来1)相对于sparse-field方法来说,dense-field的准确率好多了。2)之前的dense-field方法虽然比sparse-field的方法性能好,但是它在特征匹配阶...

Python: scikit-image Blob detection

这个用例主要介绍利用三种算法对含有blob的图像进行检测,blob 或者叫斑点,就是在一幅图像上,暗背景上的亮区域,或者亮背景上的暗区域,都可以称为blob。主要利用blob与背景之间的对比度来进行检...

图像取证:源识别和伪造检测(Image Forensics: source identification and tampering detection) 续2

图像取证:源识别和伪造检测 续2 ImageForensics: source identification and tampering detection 作者:IreneAmerini 佛...

Contour Detection and Hierarchical Image Segmentation 伯克利的一篇图像分割论文理解与学习

Contour Detection and Hierarchical Image Segmentation笔记   算法路线:gPb-------OWT------UCM 每一部份的功能: 1. gP...

红外小目标检测matlab程序——基于《Infrared Small-Target Detection Using Multiscale Gray Difference Weighted Image》

阅读了论文《Infrared Small-Target Detection Using Multiscale Gray Difference Weighted Image Entropy》,小菜鸟决定...

Image Recognition and Face Detection

Image recognition and face detection has been around for some years. However, usage and adoption was...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HDU 3523 Image copy detection(KM)
举报原因:
原因补充:

(最多只允许输入30个字)