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

【过题记录】8.4(robocom补题,网络流)

今天robocom国赛,因为一个bool函数忘记return 1而裂开(错失21分)
以此为戒


贪心消消乐

在这里插入图片描述


其实就是一个求最大子矩阵和的板子题
利用最大子段和的思想
枚举矩阵中的上下界
压成一维后利用最大子段和 O ( n ) O(n) O(n)处理
复杂度 O ( n 3 ∗ k ) O(n^3*k) O(n3k)
k为执行次数


#include<bits/stdc++.h>
using namespace std;#define int long longconst int N = 5010;
int a[N][N];
int n;
int sum[N][N];
int maxn = 0;
int s[N][N],ss[N][N];
int tot = 0;
int stx,sty,edx,edy,xx,XX,yy,YY;
int cnt = 0;void Swap(){xx = sty; XX = edy; yy = stx; YY = edx;
} 
int ce =0 ;
bool Work(){for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++){s[j][i] = s[j][i-1]+a[i][j];ss[j][i] = ss[j][i-1];if (a[i][j] == 0) ss[j][i]++; }int maxx = 0;xx = n+1; yy = n+1; XX = n+1; YY = n+1;for (stx = 1; stx <= n; stx++){for (edx = stx; edx <= n; edx++){int sum = 0;sty = 1;for (edy = 1; edy <= n; edy++){if (sum > maxx) Swap();int now = s[edy][edx]-s[edy][stx-1];int nowz = ss[edy][edx]-ss[edy][stx-1];if (nowz!=0){sty = edy+1;sum = 0;continue;}if (sum < 0){sum = 0;sty = edy;}sum+=now;if (sum > maxx) maxx = sum,Swap();if (sum == maxx){if (sty < xx) Swap();else if (sty == xx&&stx < yy) Swap();else if (sty == xx && stx == yy&&edy < XX) Swap();else if (sty == xx && stx == yy&&edy == XX && edx < YY) Swap();}}}}if (maxx == 0) return 0;tot+=maxx;printf("(%lld, %lld) (%lld, %lld) %lld\n",xx,yy,XX,YY,maxx);swap(xx,yy); swap(XX,YY);int delx = XX-xx+1;for (int i = xx-1; i >= 1; i--)for (int j = yy; j <= YY; j++)a[i+delx][j] = a[i][j];for (int i = 1; i <= delx; i++)for (int j = yy; j <= YY; j++) a[i][j] = 0;cnt++;bool f = 0;return 1;
}signed main(){cin>>n;for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++){cin>>a[i][j];if (a[i][j] > 0) maxn+=a[i][j],ce++;}while (Work()); cout<<tot<<endl;
}

拍照

一道最大权值闭合图的板子题
按如下方式连边:
在这里插入图片描述

最大全职就是 s u m − m a x f l o w sum-maxflow summaxflow
证明尚未完全理清
等我理清了来补


#include<bits/stdc++.h>
using namespace std;const int N = 7e3+100,inf = 1e9+7;
struct Node{int y,Next,v;
}e[2*N];
int len,Linkk[N];
int st,ed;void Insert(int x,int y,int v){e[++len] = (Node){y,Linkk[x],v};Linkk[x] = len;
}queue < int > q;
int d[N];bool bfs(){for (int i = 1; i <= ed; i++) d[i] = 0;while (q.size()) q.pop();d[st] = 1; q.push(st);while (q.size()){int x = q.front(); q.pop();for (int i = Linkk[x]; i; i = e[i].Next){int y = e[i].y; if (!e[i].v ||d[y]) continue;d[y] = d[x]+1; q.push(y);if (y == ed) return 1;}}return 0;
}int dinic(int x,int flow){if (x == ed) return flow;int re = flow , k;for (int i = Linkk[x]; i; i = e[i].Next){int y = e[i].y; if (!e[i].v || d[y] != d[x]+1) continue;k = dinic(y,min(re,e[i].v));if (!k) d[y] = 0;re-=k;e[i].v-=k; e[i^1].v+=k;}return flow-re;
}int n,m;
int main(){cin.tie(0);ios::sync_with_stdio(false);cin>>m>>n; len = 1;st = n+m+1; ed = n+m+2;int sum = 0;for (int i = 1; i <= m; i++){int v; cin>>v; sum+=v;Insert(st,i,v); Insert(i,st,0);int x;cin>>x;while (x){Insert(i,x+m,inf); Insert(x+m,i,0);cin>>x;}}for (int i = m+1,x; i <= m+n; i++)cin>>x,Insert(i,ed,x),Insert(ed,i,0);int flow;int maxf = 0;while (bfs())while (flow = dinic(st,inf)) maxf+=flow;cout<<sum-maxf<<endl;return 0;
}

太空飞行计划问题


与上体一样
所多的就是输出方案
这里最大流用的是dinic算法
如果最后对于一个点i,d[i]不为0,说明这个点在分层图中出现,并且用上了
那么就说明这个仪器用上了


#include<bits/stdc++.h>
using namespace std;const int N = 7e3+100,inf = 1e9+7;
struct Node{int y,Next,v;
}e[2*N];
int len,Linkk[N];
int st,ed;void Insert(int x,int y,int v){e[++len] = (Node){y,Linkk[x],v};Linkk[x] = len;
}queue < int > q;
int d[N];bool bfs(){for (int i = 1; i <= ed; i++) d[i] = 0;while (q.size()) q.pop();d[st] = 1; q.push(st);while (q.size()){int x = q.front(); q.pop();for (int i = Linkk[x]; i; i = e[i].Next){int y = e[i].y; if (!e[i].v ||d[y]) continue;d[y] = d[x]+1; q.push(y);if (y == ed) return 1;}}return 0;
}int dinic(int x,int flow){if (x == ed) return flow;int re = flow , k;for (int i = Linkk[x]; i; i = e[i].Next){int y = e[i].y; if (!e[i].v || d[y] != d[x]+1) continue;k = dinic(y,min(re,e[i].v));if (!k) d[y] = 0;re-=k;e[i].v-=k; e[i^1].v+=k;}return flow-re;
}int flag;
int re(){char c;int r=0;while (c<'0' || c>'9') c=getchar();while (c>='0' && c<='9'){r=r*10+c-'0';c=getchar();}if (c=='\r') flag=1;return r;
}int n,m;
int main(){
//	cin.tie(0);
//	ios::sync_with_stdio(false);scanf("%d %d",&m,&n); len = 1;st = n+m+1; ed = n+m+2;int sum = 0;for (int i = 1; i <= m; i++){int v; scanf("%d",&v); sum+=v;Insert(st,i,v); Insert(i,st,0);int x; flag = 0;while (getchar() == ' '){scanf("%d",&x);Insert(i,x+m,inf); Insert(x+m,i,0); 
//			cout<<"x = "<<x<<endl; }}
//	cout<<"OK";for (int i = m+1,x; i <= m+n; i++)scanf("%d",&x),Insert(i,ed,x),Insert(ed,i,0);int flow;int maxf = 0;while (bfs())while (flow = dinic(st,inf)) maxf+=flow;for (int i = 1; i <= m; i++) if (d[i]) cout<<i<<' ';cout<<endl;for (int i = 1; i <= n; i++) if (d[i+m]) cout<<i<<' '; cout<<endl;cout<<sum-maxf<<endl;return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Go语言加Vue3零基础入门全栈班11 Go语言+gorm用户管理系统实战 2024年08月03日 课程笔记
  • 一款好用的开源网站内容管理系统
  • Matplotlib中用于绘制垂直线的函数axvline的参数介绍
  • 什么是提示词注入攻击
  • 读零信任网络:在不可信网络中构建安全系统07设备信任
  • 网络编程相关
  • 6万字嵌入式最全八股文面试题大全及参考答案(持续更新)
  • JavaDS —— AVL树
  • C++ 最小生成树 洛谷
  • 群晖NAS结合内网穿透工具实现远程连接内网SFTP服务传输文件
  • 【人工智能基础二】人工神经网络基础
  • JAVA通过debezium实时采集mysql数据
  • Unity UnityWebRequest封装类
  • Java学习Day20:基础篇10
  • 二进制与进制转换与原码、反码、补码详解--内含许多超详细图片讲解!!!
  • Android Studio:GIT提交项目到远程仓库
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • Map集合、散列表、红黑树介绍
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • Spring核心 Bean的高级装配
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • 彻底搞懂浏览器Event-loop
  • 读懂package.json -- 依赖管理
  • 复杂数据处理
  • 关于使用markdown的方法(引自CSDN教程)
  • 经典排序算法及其 Java 实现
  • 聚簇索引和非聚簇索引
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 深度学习入门:10门免费线上课程推荐
  • 异常机制详解
  • 树莓派用上kodexplorer也能玩成私有网盘
  • (纯JS)图片裁剪
  • (二)丶RabbitMQ的六大核心
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (简单) HDU 2612 Find a way,BFS。
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • *2 echo、printf、mkdir命令的应用
  • .aanva
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .Net Core中Quartz的使用方法
  • .net 程序发生了一个不可捕获的异常
  • .Net 执行Linux下多行shell命令方法
  • .Net的C#语言取月份数值对应的MonthName值
  • .NET中的Exception处理(C#)
  • .sys文件乱码_python vscode输出乱码
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • @Query中countQuery的介绍
  • []error LNK2001: unresolved external symbol _m
  • [20160902]rm -rf的惨案.txt
  • [AS3]URLLoader+URLRequest+JPGEncoder实现BitmapData图片数据保存
  • [C++] 从零实现一个ping服务
  • [Foreman]解决Unable to find internal system admin account