5307. 【NOIP2017提高A组模拟8.18】偷窃 (Standard IO)

Time Limits: 1000 ms Memory Limits: 262144 KB

Description

Input

Output

Sample Input

5 5

1 4 0 5 2

2 1 2 0 1

0 2 3 4 4

0 3 0 3 1

1 2 2 1 1

Sample Output

9

Data Constraint

Hint

题解

乍一看以为是贪心,贪心保留最大的

后来,发现有个诡异的地方

这是一个会搬砖的小偷

于是,只能用二分图了

如果第i行和第j列最大值相等且可以放,就连一条边

跑一遍匹配匹配到的边就只算一次,代表只放一个就能满足一行和一列

匹配不到的行和列,就分别算一次

代码

#include<cstdio>
#include<cstring>
#include<vector>
#define N 101
using namespace std; vector<long>map[N];
long a[N][N],link[N],hang[N],lie[N];
bool cover[N]; bool find(long now)
{ long i,to;
for(i=0;i<map[now].size();i++){
to=map[now][i];
if(!cover[to]){
cover[to]=true;
if(!link[to]||find(link[to])){
link[to]=now;
return true;
}
}
}
return false;
} int main()
{ long n,m,i,j,ans=0,sum=0;
scanf("%ld%ld",&n,&m);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++){
scanf("%ld",&a[i][j]);
hang[i]=max(hang[i],a[i][j]);
lie[j]=max(lie[j],a[i][j]);
if(a[i][j])
sum+=a[i][j]-1;
}
for(i=1;i<=n;i++)
if(hang[i])ans+=hang[i]-1;
for(j=1;j<=m;j++)
if(lie[j])ans+=lie[j]-1;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++){
if(hang[i]==lie[j]&&a[i][j])
map[i].push_back(j);
}
for(i=1;i<=n;i++){
memset(cover,false,sizeof(cover));
if(find(i))
ans-=hang[i]-1;
}
printf("%ld\n",sum-ans);
return 0;
}

最新文章

  1. nodeJs 5.0.0 安装配置与nodeJs入门例子学习
  2. 快速删除.svn文件夹
  3. 信号屏蔽的切换的理解sigsuspend
  4. Google API在线生成二维码的方法
  5. mysql 输出当前月所有日期与对应的星期
  6. C#窗体截屏,简单例子
  7. hdu 4389 X mod f(x) 数位DP
  8. Java并发编程--Volatile详解
  9. APP设计规范大全
  10. 读书笔记 effective c++ Item 32 确保public继承建立“is-a”模型
  11. day 05字典相关内容
  12. 多线程服务端与客户端通信(IO是阻塞的)_02
  13. hdu3311
  14. OkHttp3几个简单的例子和在子线程更新UI线程的方法
  15. Python 文件路径
  16. Management Studio 插件生成安装包要点(以ProjkyAddin为例)
  17. hibernate cascade
  18. CvScalar
  19. 正则表达式表示 ja.resx 所在行
  20. HTML5 2D平台游戏开发#11斜坡物理

热门文章

  1. SEERC 2018 Inversion
  2. listening-conversation|信息简写|Generally|回答|矛盾
  3. ORs-2-Genome Coverage and the OR Subgenome
  4. Django实现注册,往邮箱发送验证链接
  5. 吴裕雄--天生自然python学习笔记:python用 Selenium 组件实现浏览器操作自动化
  6. PXE自动部署工具
  7. maven命令-P 参数引发的思考
  8. linux kill进程没有立刻停止
  9. linux更改系统ulimit
  10. Java IO: 异常处理