尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

狼和羊的故事还在追我

狼和羊的故事还在追我
📅 发布时间:2026/6/22 18:04:20

狼和羊的故事。

有一个 \(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;
}

相关新闻

  • 从待机功耗到峰值调度:智能Agent能源管理全流程详解
  • Wireshark静态分析实战指南:Clang-Tidy配置与源码优化深度解析
  • python-flask-django基于数据分析的个性化健康运动饮食管理系统的设计与实现_gy0754sb

最新新闻

  • 无U盘,拓展C盘!
  • Agent模块化设计:Skill原子封装与DAG调度实践
  • 如何在智能电视上享受流畅的网页浏览体验?TV Bro为你重新定义客厅上网
  • Chiplet技术与AI加速器的模块化设计优化
  • mimocode的使用
  • Arduino-ESP32项目终极指南:如何解锁隐藏的ESP32-C2支持并充分利用低成本WiFi芯片

日新闻

  • Arduino-ESP32项目深度解析:解锁隐藏芯片支持与架构演进
  • 2026年 系统窗厂家/品牌推荐榜单:隔音系统窗+高端系统门窗的核心优势与选购指南 - 品牌发掘
  • NVBench:首个双语非言语发声语音合成评测基准详解与实践

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号