【Luogu】P3356火星探险问题(费用流)
题目链接
网络流一条边都不能多连?没道理呀?
不过单看这题的确是个sb题……
#include<cstdio> #include<algorithm> #include<cstring> #include<cctype> #include<cstdlib> #include<queue> #define maxn 100 #define maxm 100000 #define lim n*m #define F(i,j) ((i-1)*m+j) #define T(i,j) (F(i,j)+lim) using namespace std; inline long long read(){long long num=0,f=1;char ch=getchar();while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();}while(isdigit(ch)){num=num*10+ch-'0';ch=getchar();}return num*f; }struct Edge{int from,next,to,val,dis,flow; }edge[maxm]; int head[maxn*maxn],num; inline void addedge(int from,int to,int val,int dis){edge[++num]=(Edge){from,head[from],to,val,dis,0};head[from]=num; } inline void add(int from,int to,int val,int dis){addedge(from,to,val,dis);addedge(to,from,0,-dis); }inline int count(int i){ return i&1?i+1:i-1; }int dis[maxn*maxn]; int flow[maxn*maxn]; int pre[maxn*maxn]; bool vis[maxn*maxn]; int Start,End; int n,m;int spfa(){memset(dis,-127/3,sizeof(dis)); dis[Start]=0; flow[Start]=0x7fffffff;queue<int>q; q.push(Start);while(!q.empty()){int from=q.front(); q.pop(); vis[from]=0;for(int i=head[from];i;i=edge[i].next){int to=edge[i].to;if(edge[i].val<=edge[i].flow||dis[to]>=dis[from]+edge[i].dis) continue;dis[to]=dis[from]+edge[i].dis;pre[to]=i; flow[to]=min(flow[from],edge[i].val-edge[i].flow);if(vis[to]) continue;vis[to]=1; q.push(to);}}int now=End;while(now!=Start){int ret=pre[now];edge[ret].flow+=flow[End];edge[count(ret)].flow-=flow[End];now=edge[ret].from;}return dis[End]; }struct Node{int x,y; };Node calc(int ret){Node ans;ans.x=(ret-1)/m+1;ans.y=ret-(ans.x-1)*m;return ans; }Node q[maxn*maxn];int tot;void dfs(int x,int y,int now){if(now==End) return;for(int i=head[now];i;i=edge[i].next){int to=edge[i].to;if(edge[i].flow==0) continue;edge[i].flow--; edge[i].val--;if(to<=lim) q[++tot]=calc(to);dfs(q[tot].x,q[tot].y,to);return;} }bool ext[maxn][maxn];int main(){int e=read();m=read();n=read();Start=1; End=n*m*2;for(int i=1;i<=n;++i)for(int j=1;j<=m;++j){int x=read();if(i!=1&&ext[i-1][j]==0) add(T(i-1,j),F(i,j),0x7fffffff,0);if(j!=1&&ext[i][j-1]==0) add(T(i,j-1),F(i,j),0x7fffffff,0);if(x==1){ext[i][j]=1;continue;}add(F(i,j),T(i,j),1,x==2?1:0);add(F(i,j),T(i,j),0x7fffffff,0);}int cnt=0;while(1){int now=spfa();if(now<0) break;cnt++;if(cnt>e) break;tot=0;dfs(1,1,1);q[0]=(Node){1,1};for(int j=1;j<=tot;++j){Node a=q[j-1],b=q[j];if(a.x==b.x) printf("%d %d\n",cnt,1);else printf("%d %d\n",cnt,0);}}return 0; }
转载于:https://www.cnblogs.com/cellular-automaton/p/8449320.html
【Luogu】P3356火星探险问题(费用流)相关推荐
- P3356 火星探险问题(网络流)
P3356 火星探险问题 对于一个第一次经过会有价值,但是之后经过没有价值的点,我们的处理方法就是只连一条流量为1并且有费用的边,再连接流量为INF但是没有费用的边,这样我们要使得价值最大就会优先流有 ...
- 洛谷 - P3356 火星探险问题(最大费用最大流+拆点+路径打印)
题目链接:点击查看 题目大意:给出一个n*m的矩阵,每个点都有一个数字: 0:平坦无障碍 1:障碍 2:石块 现在在点(1,1)处有k个探测车,他们都要去往点(n,m)处,探测车只能向下或向右行驶,现 ...
- luogu P2053 [SCOI2007]修车(费用流提前计算)
P2053 [SCOI2007]修车 要求平均时间最短,就等同于要求总时间最短. 一个人维修所花的时间,对同一位技术人员之后维修造成的影响是已知且固定的.那么,我们将费用提前计算.即将第 i 位车主的 ...
- Gym 101190D BZOJ 4842 Luogu P6967 LOJ #6071 [NEERC2016]Delight for a Cat (费用流)
题目链接 (BZOJ) 大人,时代变了 (Gym) https://codeforces.com/gym/101190 (Luogu) https://www.luogu.com.cn/problem ...
- BZOJ 1920 Luogu P4217 [CTSC2010]产品销售 (模拟费用流、线段树)
题目链接 (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=1920 (luogu) https://www.luogu.org/prob ...
- 【费用流】【线性规划】志愿者招募(luogu 3980)
正题 luogu 3980 题目大意 有n个时刻,第i个时刻需要aia_iai个志愿者,有m类志愿者,第j类可以从ljl_jlj做到rjr_jrj,代价为wjw_jwj,数量无限,问你使所有时 ...
- [P1149] TSOI南湖探险(费用流)
背景 NOIP2009,TSOI大爆发,创造了历史,书写了传奇.于是,在SRC的提议下,大家一起去南湖公园探险. 描述 南湖地区的地形错综复杂.这里有茂密的原始森林,有一望无际的湖水,有大自然一切钟灵 ...
- 网络流二十四题之二十二 —— 火星探险问题
火星探险问题 Description 火星探险队的登陆舱将在火星表面着陆,登陆舱内有多部障碍物探测车. 登陆舱着陆后,探测车将离开登陆舱向先期到达的传送器方向移动. 探测车在移动中还必须采集岩石标本. ...
- P3159 [CQOI2012]交换棋子(费用流)
题目描述 有一个n行m列的黑白棋盘,你每次可以交换两个相邻格子(相邻是指有公共边或公共顶点)中的棋子,最终达到目标状态.要求第i行第j列的格子只能参与mi,j次交换. 输入输出格式 输入格式: 第 ...
最新文章
- HBase学习总结(2):HBase介绍及其基本操作
- 解决 iframe 在 ios 上不能滚动的问题
- matlab图像显示时间,请问怎么把样点数变成时间显示在图像了里
- 从易到难,针对复杂问题的无监督式问题分解方法
- C\C++ 获取当前路径
- bmp转换tiff c++代码_如何用Java语言将图像转换为PDF?Spire.PDF for Java轻松搞定
- 吉林省计算机科学与技术专业测评,我校计算机科学与技术、英语两个专业在吉林省专业综合评价中获得可喜成绩...
- 期货一个价格变动对应价值变化
- pytorch_pix2pix之argparse
- HTML期末作业我的家乡静态网页设计
- C语言生成负指数分布,泊松分布与负指数分布的关系
- Oracle技巧之 desc+表名
- (给3d人物模型添加原始动画文件 针对3d模型有动画文件 没有Avatar 没有Animator Controller)
- skimage.filters.frangi函数
- 第四章第二节数据资产盘点-数据资产盘点方法伦
- 戏说计算机发展史,戏说IT:电脑让你三更死!那你还真死定了(第296期)
- 什么是nuget?nuget包是如何管理
- python学习dya4
- 计算机奖项含金量排名,大家一起拍下NBA常规赛各项奖项含金量排名,都是个人观点,讨论讨论...
- linux服务器垃圾清理,Linux下垃圾清理方法总结[转发]
热门文章
- python编程语言的缺点-常见的AI编程语言优缺点比较,程序员千万不要入错行!...
- python详细安装教程 path-Python解释器安装教程以及环境变量配置
- python真的那么强大嘛-python强大吗
- python基础一入门必备知识-Python数据分析入门必备基础知识
- python个人赚钱攻略-每个懂Python的人都必须知道的赚钱神器
- python真的那么强大嘛-这些 Python 库真的很“冷”,但是却很强大
- python在当前目录创建txt文件-python根据txt文本批量创建文件夹
- 用python画皮卡丘代码-利用Python绘制萌萌哒的皮卡丘
- python3.6.0安装教程-Python 3.6.0下载及安装教程
- python下载方法-python实现下载文件的三种方法_python