【loj】#6007. 「网络流 24 题」方格取数(二分图最大点权独立集)
来源:互联网 发布:深入浅出node.js mobi 编辑:程序博客网 时间:2024/05/23 19:13
记录一个菜逼的成长。。
题目链接
算法合集之《最小割模型在信息学竞赛中的应用》
在上面的论文末尾里有对这个问题的具体解释
#include <bits/stdc++.h>using namespace std;#define rep(i,l,r) for( int i = l; i <= r; i++ )#define rep0(i,l,r) for( int i = l; i < r; i++ )#define ALL(v) (v).begin(),(v).end()#define cl(a,b) memset(a,b,sizeof(a))#define clr clear()#define pb push_back#define mp make_pair#define fi first#define se secondtypedef long long LL;typedef pair<int,int> PII;const int INF = 0x3f3f3f3f;const int MAX_V = 1000 + 10;struct edge{ int to,cap,rev,flow; edge(){} edge(int _to,int _cap,int _rev,int _flow):to(_to),cap(_cap),rev(_rev),flow(_flow){}};vector<edge>G[MAX_V];int level[MAX_V];int iter[MAX_V];void add(int from,int to,int cap,int flow = 0){ G[from].push_back(edge(to,cap,G[to].size(),0)); G[to].push_back(edge(from,0,G[from].size()-1,0));}void bfs(int s){ memset(level,-1,sizeof(level)); queue<int>que; level[s] = 0; que.push(s); while(!que.empty()){ int f = que.front(); que.pop(); for( int i = 0; i < G[f].size(); i++ ){ edge &e = G[f][i]; if(e.cap > 0 && level[e.to] == -1){ level[e.to] = level[f] + 1; que.push(e.to); } } }}int dfs(int v,int t,int f){ if(v == t)return f; for( int &i = iter[v]; i < G[v].size(); i++ ){ edge &e = G[v][i]; if(e.cap > 0 && level[v] < level[e.to]){ int d = dfs(e.to,t,min(e.cap,f)); if(d > 0){ e.cap -= d;e.flow += d; G[e.to][e.rev].cap += d; return d; } } } return 0;}int max_flow(int s,int t){ int flow = 0; for(;;){ bfs(s); if(level[t] == -1)return flow; memset(iter,0,sizeof(iter)); int f; while((f = dfs(s,t,INF)) > 0) flow += f; }}int a[MAX_V][MAX_V];int n,m;int getID(int i,int j){ return (i-1) * m + j;}int main(){ scanf("%d%d",&n,&m); int sum = 0,s = 0,t = n * m + 1; rep(i,1,n){ rep(j,1,m){ int x; scanf("%d",&x); sum += x; int flag = !((i+j) & 1); int id = getID(i,j); if(flag)add(s,id,x); else add(id,t,x); if(flag){ if(i > 1)add(id,getID(i-1,j),INF); if(i < n)add(id,getID(i+1,j),INF); if(j > 1)add(id,getID(i,j-1),INF); if(j < m)add(id,getID(i,j+1),INF); } } } printf("%d\n",sum - max_flow(s,t)); return 0;}
阅读全文
0 0
- 【loj】#6007. 「网络流 24 题」方格取数(二分图最大点权独立集)
- [网络流][最大点权独立集] 方格取数
- loj6007「网络流 24 题」方格取数(最大点权独立集+最小割)
- nefu482方格取数【最大点权独立集】网络流24题
- [网络流24题]方格取数 最大点权独立集
- 线性规划与网络流24题之方格取数问题 二分图点权最大独立集
- [网络流24题] 09 方格取数问题 (二分图点权最大独立集,最小割)
- 【网络流24题】方格取数(二分图染色+最大权独立点集+最小割)
- HDU 1569 - 方格取数(2) 二分图最大点权独立集(构图最大流解)
- nefu 482 方格取数问题 二分图最大点权独立集
- ★ 方格取数3 二分图的最大点权独立集
- hdu1569 方格取数(2) 二分图最大点权独立集
- HDU 1565 方格取数(1) 二分图最大点权独立集
- HDU 1569 方格取数(2) (二分图的最大点权独立集)
- 【网络流二十四题 方格取数问题】【二分图点权最大独立集->最小割】
- hdu1565 方格取数 最大流(二分图极大点权独立集) 或状态压缩dp
- hdu 1569 方格取数(2) 网络流--最大点权独立集
- Hdu 1569 方格取数(2) (网络流最大点权独立集)
- 初识单例模式——Android设计模式
- 表单
- ReactiveCocoa源码解读(二)
- [日常训练] 魔法传输
- 7.19 Allowance(贪心,*******思路理顺)
- 【loj】#6007. 「网络流 24 题」方格取数(二分图最大点权独立集)
- hibernate继承结构中每个类一张表
- 企业架构培训:为什么首先要建立和优化目标?
- 机器学习实战【3】(朴素贝叶斯)
- 数据库概念
- Centos 7.3 install Ambari2.5
- windows服务开发遇到的问题和教训
- React Native打包APK
- Windows socket之IO完成端口(IOCP)模型开发