最小点权覆盖集最大点权独立集
最小点权覆盖集
最大点权独立集
洛谷P2274 方格取数问题
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
#define LL long long int
using namespace std;
const int maxn=100005,maxm=10000005,INF=2000000000;inline int read(){int out=0,flag=1;char c=getchar();while(c<48||c>57) {if(c=='-') flag=-1;c=getchar();}while(c>=48&&c<=57) {out=out*10+c-48;c=getchar();}return out*flag;
}int head[maxn],nedge=0;
struct EDGE{int to,f,next;
}edge[maxm];inline void build(int a,int b,int w){edge[nedge]=(EDGE){b,w,head[a]};head[a]=nedge++;edge[nedge]=(EDGE){a,0,head[b]};head[b]=nedge++;
}int color[105][105],N,M,S,T,X[4]={0,0,-1,1},Y[4]={1,-1,0,0};bool vis[maxn];
int d[maxn],cur[maxn];bool bfs(){fill(vis,vis+maxn,false);queue<int> q;q.push(S);vis[S]=true;d[S]=0;int u,to;while(!q.empty()){u=q.front();q.pop();for(int k=head[u];k!=-1;k=edge[k].next)if(!vis[to=edge[k].to]&&edge[k].f){d[to]=d[u]+1;vis[to]=true;q.push(to);}}return vis[T];
}int dfs(int u,int minf){if(u==T||!minf) return minf;int flow=0,f,to;if(cur[u]==-2) cur[u]=head[u];for(int& k=cur[u];k!=-1;k=edge[k].next)if(d[to=edge[k].to]==d[u]+1&&(f=dfs(to,min(edge[k].f,minf)))){edge[k].f-=f;edge[k^1].f+=f;flow+=f;minf-=f;if(!minf) break;}return flow;
}int maxflow(){int flow=0;while(bfs()){fill(cur,cur+maxn,-2);flow+=dfs(S,INF);}return flow;
}int main()
{fill(head,head+maxn,-1);N=read();M=read();S=0;T=N*M+1;color[0][0]=1;int x;LL tot=0;for(int i=1;i<=N;i++)for(int j=1;j<=M;j++){if((i%2&&j%2)||(i%2==0&&j%2==0)) color[i][j]=1;else color[i][j]=0;}for(int i=1;i<=N;i++)for(int j=1;j<=M;j++){x=read();tot+=x;if(color[i][j]) build(M*(i-1)+j,T,x);else{build(S,M*(i-1)+j,x);for(int k=0;k<4;k++){int nx=i+X[k],ny=j+Y[k];if(nx>0&&ny>0&&nx<=N&&ny<=M) build(M*(i-1)+j,M*(nx-1)+ny,INF);}}}cout<<tot-maxflow()<<endl;return 0;
}
最小点权覆盖集最大点权独立集相关推荐
- 网络流之最小点权覆盖和最大点权独立集学习
转载:http://yzmduncan.iteye.com/blog/1149057 二分图最小点覆盖和最大独立集都可以转化为最大匹配求解.在这个基础上,把每个点赋予一个非负的权值,这两个问题就转化为 ...
- PAT 1003 Emergency(最短路(迪杰斯特拉||贝尔曼)最小边权下的最大点权)
1003. Emergency (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue As an emerg ...
- [学习笔记]最小割之最小点权覆盖最大点权独立集
最小点权覆盖 给出一个二分图,每个点有一个非负点权 要求选出一些点构成一个覆盖,问点权最小是多少 建模: S到左部点,容量为点权 右部点到T,容量为点权 左部点到右部点的边,容量inf 求最小割即可. ...
- hdu 1569 方格取数(2) 最大点权独立集
二分图. 最大点权独立集=总权-最小点权覆盖集. 哪位大神能给一些二分图 最大点权独立集等等 的相关资料!!!!!跪谢 用网络流求解最小点权覆盖集即可,建图不讲了. #include<cstdi ...
- [luoguP2774] 方格取数问题(最大点权独立集)
传送门 引入两个概念: 最小点权覆盖集:满足每一条边的两个端点至少选一个的最小权点集. 最大点权独立集:满足每一条边的两个端点最多选一个的最大权点集. 现在对网格染色,使得相邻两点颜色不同,之后把两个 ...
- [网络流][最大点权独立集] 方格取数
预备知识: 点覆盖集:无向图G的一个点集,使得该图中所有边都至少有一个端点在该集合内. 最小点权覆盖集:在带点权无向图G中,点权之和最小的覆盖集. 点独立集:无向图G的一个点集,使得任两个在该集合中的 ...
- HDU 1569 最大点权独立集
最大点权独立集与最小点权覆盖是对偶问题,这里先介绍最小点权覆盖的解法. 最小点权覆盖问题是指,给出一张二分图,二分图的每个节点带有一个点权,要求从中选出若干节点,使得这些节点能够覆盖二分图中所有的 ...
- Hlg 1407 【最小点权覆盖】.cpp
题意: 给出一个图 该图的每个格子上有值 当扫射一行或一列的时候 格子上的值非0的就-1 输入: 给出n m 表示该图为n*m的图 接下来n*m的图写上格子的值 输出: 最少扫射几次可以使所有点权变成 ...
- POJ 3308 Paratroopers (对数转换+最小点权覆盖)
题意 敌人侵略r*c的地图.为了消灭敌人,可以在某一行或者某一列安置超级大炮.每一个大炮可以瞬间消灭这一行(或者列)的敌人.安装消灭第i行的大炮消费是ri.安装消灭第j行的大炮消费是ci现在有n个敌人 ...
最新文章
- SpringBoot第十一篇:springboot集成swagger2,构建优雅的Restful API
- 防止Excel导入超大带格式文本乱码的方法
- [C#] 等待启动的进程执行完毕
- Shell(8)——for、while、until
- python矩阵中找满足条件的元素_Python 找到列表中满足某些条件的元素方法
- 01-mysql数据库入门篇-认识mysql-01-05
- kafka整合ldap权限管理
- matlab中nc文件,教程合集 | MATLAB文件读写(以nc与txt为例)
- 开发环境和运行环境_内网安全运行环境
- jqGrid中时间控件input的值赋给点开后的laydate控件
- HTML CSS 兼容所有浏览器的自定义鼠标样式
- 311 复制文件的异常处理
- 分享一个自己做的记账的小程序 - 智能记账,欢迎朋友们体验
- linux微软雅黑字体库_一条命令搞定Linux字体渲染——Ubuntu系发行版微软雅黑+宋体终极解决方案...
- 数组取交集、并集与补集
- SQLServer2019 如何导出单张表数据
- Python代码调试
- 服务——Service
- MySQLsqlyog详细内容
- Common Data Model (CDM)通用数据模型1