P2172 [国家集训队]部落战争 二分图最小不相交路径覆盖
二分图最小不相交路径覆盖
#include<bits/stdc++.h> using namespace std; const int MAXN = 5550; const int MAXM = 1000005; const int INF = 1000000050; int Head[MAXN], cur[MAXN], lev[MAXN], to[MAXM << 1], nxt[MAXM << 1], f[MAXM << 1], ed = 1, S, T; inline void addedge(int u, int v, int cap) {to[++ed] = v;nxt[ed] = Head[u];Head[u] = ed;f[ed] = cap;to[++ed] = u;nxt[ed] = Head[v];Head[v] = ed;f[ed] = 0;return; } inline bool BFS() {int u;memset(lev, -1, sizeof(lev));queue<int>q;lev[S] = 0;q.push(S);while (q.size()) {u = q.front();q.pop();for (int i = Head[u]; i; i = nxt[i])if (f[i] && lev[to[i]] == -1) {lev[to[i]] = lev[u] + 1;q.push(to[i]);/*if (to[i] == T){return 1;}magic one way optimize*/}}memcpy(cur, Head, sizeof Head);return lev[T] != -1; } inline int DFS(int u, int maxf) {if (u == T || !maxf) {return maxf;}int cnt = 0;for (int &i = cur[u], tem; i; i = nxt[i])if (f[i] && lev[to[i]] == lev[u] + 1) {tem = DFS(to[i], min(maxf, f[i]));maxf -= tem;f[i] -= tem;f[i ^ 1] += tem;cnt += tem;if (!maxf) {break;}}if (!cnt) {lev[u] = -1;}return cnt; } int Dinic() {int ans = 0;while (BFS()) {ans += DFS(S, 2147483647);}return ans; } void init(int SS, int TT) {memset(Head, 0, sizeof(Head));ed = 1;S = SS;T = TT;return; } char ff[205][205]; int dir[5][2]; int aim[205][205]; int cnt = 0; int main() {int n, m;int r, c;int u, v;scanf("%d %d %d %d", &n, &m, &r, &c);dir[1][0] = dir[2][1] = r;dir[1][1] = dir[2][0] = c;dir[3][0] = c, dir[4][0] = r;dir[3][1] = -r, dir[4][1] = -c;if(r==c){dir[2][0]=dir[2][1]=dir[4][0]=dir[4][1]=50;}for (int i = 1; i <= n; i++) {scanf("%s", ff[i]+1);}for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {if (ff[i][j] == '.') {aim[i][j] = ++cnt;}}}S = 0, T = 2 * cnt + 1;for (int i = 1; i <= cnt; i++) {addedge(S, i, 1);addedge(cnt + i, T, 1);}for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++) {if (ff[i][j] == '.') {for (int k = 1; k <= 4; k++) {int dx = i + dir[k][0];int dy = j + dir[k][1];if (dx >= 1 && dx <= n && dy >= 1 && dy <= m) {if (ff[dx][dy] == '.') {u = aim[i][j], v = aim[dx][dy] + cnt;addedge(u, v, 1);//cout<<i<<" "<<j<<" "<<dx<<" "<<dy<<endl; }}}}}cout << cnt - Dinic() << endl;return 0; }
View Code
转载于:https://www.cnblogs.com/Aragaki/p/10694881.html
P2172 [国家集训队]部落战争 二分图最小不相交路径覆盖相关推荐
- 洛谷:P2172 [国家集训队]部落战争
题目链接: P2172 [国家集训队]部落战争 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 解题思路: 很明显的二分图:将原点与它能走到的点连一条边,然后做一遍最小点覆盖:即选出 ...
- [国家集训队] 部落战争
题目链接:戳我 差不多就是DAG最小路径覆盖吧--拆点连边. 不会的可以看看蒟蒻的这个关于网络流的小总结qwq 最小路径覆盖(不相交)=节点个数-最大匹配 但是要注意的是这个题的节点个数不能算高山深涧 ...
- [国家集训队]部落战争
题目大意:给出n*m的矩阵以及r,c.求最小路径覆盖. 本来是匈牙利算法裸题,网络流也可以跑一跑. 但是我先粘一个骗分大错解: #include<cstdio> #include<c ...
- 51nod_2929 部落战争(DAG最小路径覆盖)
部落战争 Problem Description lanzerb的部落在A国的上部,他们不满天寒地冻的环境,于是准备向A国的下部征战来获得更大的领土. A国是一个M*N的矩阵,其中某些地方是城镇,某些 ...
- bzoj 2150: 部落战争 (最小路径覆盖)
2150: 部落战争 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 879 Solved: 493 [Submit][Status][Discus ...
- BZOJ 2039: [2009国家集训队]employ人员雇佣 最小割 二元组建图模型
2039: [2009国家集训队]employ人员雇佣 Time Limit: 20 Sec Memory Limit: 259 MB Submit: 1614 Solved: 789 [Subm ...
- bzoj2150 部落战争 二分图匹配
题目链接:戳这里 2150: 部落战争 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 1141 Solved: 631 [Submit][Stat ...
- [bzoj2150] 部落战争 二分图
2150: 部落战争 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 951 Solved: 533 [Submit][Status][Discuss] ...
- [BZOJ2150]部落战争-二分图匹配
部落战争 Description lanzerb的部落在A国的上部,他们不满天寒地冻的环境,于是准备向A国的下部征战来获得更大的领土. A国是一个MN的矩阵,其中某些地方是城镇,某些地方是高山深涧无人 ...
最新文章
- Maven中mirrors和repository的关系
- mvc3 RenderAction传参问题
- PLSQL常用方法汇总(转载)
- Python3 高级特性
- 人力资源数字化的入口——组织生产力数字模型
- CentOS6.8 安装node.js npm
- CoreData 从入门到精通(五)CoreData 和 TableView 结合
- CCF202006-1 线性分类器
- 2018年10月底新公司
- unity3d点击屏幕判断是否击中场景中物体
- Unix/Linux操作系统介绍
- IEEE MAC地址分配
- 2.郝斌C语言笔记——优缺点
- matlab语音信号处理/滤波器降噪/时域频域、归一化图谱
- 互联网金融学习总结(5)——市场主流的风控模型简要学习总结
- 操作系统 设备基本概念和分类
- vscode运行命令是报错:标记“”不是此版本中的有效语句分隔符。
- 如何在Word中创建和打印标签
- 面试中常问的你在项目开发中遇到过哪些问题怎么回答?
- 解密dlink固件(四)
热门文章
- JVM中可生成的最大Thread数量
- 正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码......
- gis中的加权求和工具在哪里_ArcGIS教程:加权总和的工作原理
- android studio 自动提示jni代码,如何将JNI(C/C++本机代码)添加到现有的Android Studio项目中...
- python 检验数据正态分布程度_python 实现检验33品种数据是否是正态分布
- python 特征选择卡方_特征选择
- mysql的判断更新_mysql判断记录是否存在,存在则更新,不存在则插入
- 一键部署dns服务_OpenShift : 通往云原生、DevOps、微服务和Serverless的大门
- 计算机cg专业,cg行业要学哪个专业好
- python label textvariable_在子窗口中为标签的textvariable赋值失败时,有关,给,Label,问题...