当前位置: 首页 > 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.rkmt.cn/news/122624.html

相关文章:

  • 从待机功耗到峰值调度:智能Agent能源管理全流程详解
  • Wireshark静态分析实战指南:Clang-Tidy配置与源码优化深度解析
  • python-flask-django基于数据分析的个性化健康运动饮食管理系统的设计与实现_gy0754sb
  • 巨 椰 云手机离线多开
  • 2025深度测评泰菲拉床垫到底好不好?附靠谱床垫定做厂家清单 - 栗子测评
  • 【redis-day03-缓存三兄弟及解决方案】
  • ROI 实录:引入 AI Agent 后,我们的接口测试维护成本降低了 70%
  • 52、系统性能优化全攻略
  • HTML如何设计JQuery支持大文件上传的批量选择功能?
  • 阿布昔替尼用法用量全解析:成人与青少年适用指南【海得康】
  • 车规级技术破局智慧巡检!诚芯智联渠道峰会解锁第二增长曲线
  • Vim插件管理器VAM:零基础小白也能轻松驾驭的终极神器
  • 2025国际机票怎么查更准?从实时价格、税费透明度分析机票查询平台 - 资讯焦点
  • 为什么顶尖金融机构都在重构Agent审计日志?背后隐藏的4大合规趋势
  • 2025弹簧床垫工厂哪家好?实测弹簧床垫厂家告诉你答案 - 栗子测评
  • Ramile智能工具:5分钟完成软件著作权代码提取的终极解决方案
  • 为什么你的Agent总无法恢复?这4个坑90%的人都踩过
  • IDM使用指南:获取完整功能体验
  • androlua 安卓13 动态申请sd卡权限
  • Clover Bootloader 完全指南:轻松打造多系统启动环境
  • 2025年蜂窝活性炭厂家推荐:技术先进的蜂窝活性炭制造商品牌 - 深度智识库
  • 空气能十大品牌权威排名:引领绿色能源新时代 - 资讯焦点
  • 如何让物流仓储Agent实现空间利用最大化?90%的企业都忽略了这3个关键点
  • 深入解析:5G与物联网:推动智能城市发展的核心技术
  • Agent任务丢弃率降低80%,,揭秘头部物流企业背后的链路追踪与QoS策略
  • 2025电梯品牌推荐盘点: 附亚太西奥电梯是几线品牌详解 - 栗子测评
  • 12.16 标签(六) 表单标签 label
  • pyOCD又升级了,发布V0.42版本,月更(2025-12-18)
  • 小程序毕设项目推荐-基于springboot的ai识别宠物小程序基于SpringBoot的宠物识别小程序的设计与实现【附源码+文档,调试定制服务】
  • Heroicons v2.1.5终极指南:23个新图标的完整应用方案