当前位置: 首页 > news >正文

狼和羊的故事还在追我

狼和羊的故事。

有一个 \(n \times m\) 的网格,第 \(i\) 行第 \(j\) 列有一个数 \(a_{i,j} \in \{0,1,2\}\)。你可以沿网格线划分网格,要求划分后的每一部分不能同时出现 \(1\)\(2\)。你需要最小化划分网格的网格线总长度。

\(1 \leq n,m \leq 100\)

网络流建模。为了分割所有的 \(1\)\(2\),考虑建立源点 \(s\) 向所有的 \(1\) 连边,建立汇点 \(t\) 向所有的 \(2\) 连边,对于相邻的格子之间连边,容易发现此时的最小割就是原问题答案。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const long long INF=0x3f3f3f3f3f3f3f3f;
const int N=10000+2,M=50000;
int n,m,s,t,tot_edge;
int from[2*M+10],to[2*M+10],nxt[2*M+10];
long long cap[2*M+10];
int head[N+10],cur[N+10],level[N+10];
bool bfs(){for(int i=1;i<=n;i++){level[i]=-1;}queue<int> q;level[s]=0;q.push(s);while(!q.empty()){int u=q.front();q.pop();for(int i=head[u];~i;i=nxt[i]){int v=to[i];if(cap[i]  &&  level[v]==-1){level[v]=level[u]+1;q.push(v);}}}return level[t]!=-1;
}
long long dfs(int u,long long flow){if(u==t  ||  flow==0){return flow;}long long ans=0;for(int i=cur[u];~i;i=nxt[i]){cur[u]=i;int v=to[i];if(cap[i]  &&  level[v]==level[u]+1){long long res=dfs(v,min(flow,cap[i]));ans+=res;flow-=res;cap[i]-=res;cap[i^1]+=res;if(flow==0){break;}}}return ans;
}
long long Dinic(){long long max_flow=0;while(bfs()){for(int i=1;i<=n;i++){cur[i]=head[i];}max_flow+=dfs(s,INF);}return max_flow;
}
void add_edge(int u,int v,long long w){from[tot_edge]=u;to[tot_edge]=v;cap[tot_edge]=w;nxt[tot_edge]=head[u];head[u]=tot_edge;tot_edge++;
}
void init(){tot_edge=0;memset(nxt,-1,sizeof(nxt));memset(head,-1,sizeof(head));
}
int col[110][110],id[110][110];
int main(){init();int c_n,c_m;scanf("%d %d",&c_n,&c_m);s=++n;t=++n;for(int i=1;i<=c_n;i++){for(int j=1;j<=c_m;j++){scanf("%d",&col[i][j]);id[i][j]=++n;if(col[i][j]==1){add_edge(s,id[i][j],4);add_edge(id[i][j],s,0);}if(col[i][j]==2){add_edge(id[i][j],t,4);add_edge(t,id[i][j],0);}}}for(int i=1;i<=c_n;i++){for(int j=1;j<=c_m;j++){if(i-1>=1){add_edge(id[i][j],id[i-1][j],1);add_edge(id[i-1][j],id[i][j],0);}if(i+1<=c_n){add_edge(id[i][j],id[i+1][j],1);add_edge(id[i+1][j],id[i][j],0);}if(j-1>=1){add_edge(id[i][j],id[i][j-1],1);add_edge(id[i][j-1],id[i][j],0);}if(j+1<=c_m){add_edge(id[i][j],id[i][j+1],1);add_edge(id[i][j+1],id[i][j],0);}}}printf("%lld",Dinic());return 0;
}
http://www.jsqmd.com/news/111153/

相关文章:

  • 零售连锁门店数字化变革,高效管理系统成关键
  • 55、Ubuntu系统软件管理全攻略
  • sql注入中过滤分隔符的测试方法
  • 【零信任架构落地难点】:政务环境中Agent动态权限控制核心技术
  • 2025软床床垫源头厂家甄选:优质海绵床垫厂家,性价比拉满 - 栗子测评
  • Wireshark静态分析实战指南:Clang-Tidy配置与源码优化深度解析
  • 终极Mac菜单栏整理指南:用Dozer隐藏图标打造清爽桌面
  • Java对象差异对比终极指南:如何快速实现对象变化追踪
  • python-flask-django基于数据分析的个性化健康运动饮食管理系统的设计与实现_gy0754sb
  • 巨 椰 云手机离线多开
  • 18、认证模型与技术全解析
  • 阿布昔替尼:特应性皮炎患者的创新口服治疗新选择【海得康】
  • Reddit营销的正确姿势:7个让你成为“自己人”而非广告商的核心技巧
  • 还在凭经验施肥?AI Agent已实现毫米级精准投喂,产量提升超25%!
  • 52、系统性能优化全攻略
  • 伺服压力机如何选型?五大品牌对比与选购指南 - 资讯焦点
  • 【redis-day03-缓存三兄弟及解决方案】
  • ROI 实录:引入 AI Agent 后,我们的接口测试维护成本降低了 70%
  • 阿布昔替尼用法用量全解析:成人与青少年适用指南【海得康】
  • HTML如何设计JQuery支持大文件上传的批量选择功能?
  • 车规级技术破局智慧巡检!诚芯智联渠道峰会解锁第二增长曲线
  • 2025记忆棉床垫厂家盘点:高口碑乳胶床垫厂家合集,闭眼选不 - 栗子测评
  • 9、应用程序安全保障全攻略
  • 【c++进阶】C++11新特性:一切皆可{}初始化
  • 广州 大模型备案与算法备案补贴政策解析
  • Charticulator图表定制实战指南:3步打造专业级数据可视化
  • 2025电梯品牌推荐盘点: 附亚太西奥电梯是几线品牌详解 - 栗子测评
  • 从繁琐到高效:招聘自动化系统优化招聘流程的关键步骤
  • 网站健康度核心:失效链接的系统性诊断与修复完整方案
  • 从78%降至3%!全网最实用的论文免费降aigc干货教程(附降AI工具合集) - 殷念写论文