首页 > 其他分享 >首师大附中集训D1日报(20231210)-总结部分

首师大附中集训D1日报(20231210)-总结部分

时间:2024-03-16 13:11:06浏览次数:24  
标签:师大附中 return val int head tot 20231210 D1 dis

知识点总结

网络流,说白了就是把有向带边权的边看成一条水管,权值就是这个水管的最大流量,源点出水,汇点入水,其余的普通点(水管节点)出入水都得平衡。

最大流问题:整个系统最大的流量

不管是EK还是dinic 精髓都是建反边

反边类似于反悔贪心,在用了一个水管的流量的同时把权值加回到他的反边上,反边参与算法过程,这样,在我们想再次使用一个边的时候,就直接用反边完成了反悔。

注意反边不等于双向边,双边可以是对每一个方向边见了一组正反边,也可以变成一组正反边,权值各自付成w,效果似乎是等价的(存疑)

别的都还挺好理解的,建边暂时背代码就可以了

贴个板子

struct edge{
	int to,nxt,val;
}e[2*N*N];
void add(int u,int v,int w){
	e[++tot].to=v;
	e[tot].nxt=head[u];
	e[tot].val=w;
	head[u]=tot;
	
	e[++tot].to=u;
	e[tot].nxt=head[v];
	e[tot].val=0;
	head[v]=tot;
}
bool bfs(){
	queue<int> q;
	for(int i=1;i<=n+2;i++) dis[i]=INF;
	q.push(s);
	dis[s]=0;
	now[s]=head[s];
	while(!q.empty()){
		int u=q.front();
		q.pop();
		for(int i=head[u];i;i=e[i].nxt){
			int v=e[i].to;
			if(e[i].val>0&&dis[v]==INF){
				q.push(v);
				now[v]=head[v];
				dis[v]=dis[u]+1;
				if(v==t) return 1;
			}

		}
	}
	return 0;
}
int dfs(int u,int w){
	if(u==t) return w;
	int k,res=0;
	for(int i=now[u];i&&w;i=e[i].nxt){
		now[u]=i;
		int v=e[i].to;
		if(e[i].val>0&&(dis[v]==dis[u]+1)){
			k=dfs(v,min(w,e[i].val));
			if(k==0) dis[v]=INF;
			e[i].val-=k;
			e[i^1].val+=k;
			res+=k;
			w-=k;
		}
	}
	return res;
}
	
int dinic(){
	int ans=0;
	while(bfs()){
		ans+=dfs(s,INF);
	}
	return ans;
}

最小割问题 可以形象理解为把图分成两个部分,两部分之间的边直接切开,切的边权就是割的容量,最小割就是最小割容量

通过感性理解可得 最大流=最小割
结论直接用

最大流最小割问题关键在于建模,没有什么固定套路,考点一般就在这里
有些小技巧:

1.$INF$的边权代表随便流(割不开)

2.分层思想 其实是一种考虑图上点的方式 把各个点按某种形式分属不同层,考虑问题的时候可以从层出发和分层图最短路区分,听老师讲的时候就是这里蒙了

P4897很有意义的一道题,当多次查询$f(s,t)$ 时,暴力时间复杂度必炸
采用分治思想,对于每一部分图,在全局跑最小割,利用 $dis$ 数组就可以区分割出的两个部分,把这两部分连一条边权为最小割的边(不是在原图上)就可以构成一颗重构树,两点源汇最小割可以转化为两点间距离

也可以一边跑一边记录答案,可以倍增查询但没必要,数据范围往往允许用一些暴力一点的手段,这个时候没必要在冗长的代码后面加不稳定因素

还有推流,正反边总量不变,直接倒回原状态就行

费用流
不难理解 就是把bfs序找边换成了spfa找最短路 回头更新板子

循环流 没有源点和汇点,所有点都要保证平衡,定义上下界 还没做到题,回头更新

小优化 把边按照$2^t$分层再跑,很玄学但是有用

课堂笔记

未理解内容

CS算法完全没懂,不过好像几乎完全不考,暂时费用流有对应的算法可以应对

反边的原理还是只能感性理解

消圈懂了但是也是感性理解

jhonson算法原来就是背结论,现在还是背结论

做题总结

vjudge 5/14

1.板子不熟练,每道题从头打模板部分都没一遍过,消耗了不少调试时间

2.建模思想不掌握,不知道咋连边,就是题的主要考点应对不了

3.调代码有时候会不在状态,一点小错找一年,比赛有时候也有这个问题,估计跟效率和算法理解都有关系,其实最慢的反倒是第一道做的题,所以说算法理解还是关键

4.题的难度压力一下大了,模拟赛感觉要寄,以拿部分分为主,冲正解不要轴,先考虑下可行性,想错了同时浪费思考时间和打代码时间

标签:师大附中,return,val,int,head,tot,20231210,D1,dis
From: https://www.cnblogs.com/youlv/p/18076964/daily_2023ssdfzD1_1

相关文章

  • Android11 FallbackHome启动和关闭流程分析
    Android7.0引入了新特性:DirectBootMode,设备启动后进入的一个新模式,直到用户解锁(unlock)设备此阶段结束。在这个模式下,系统调用resolveHomeActivity找到的是FallbackHome,而不是我们的桌面应用。所以系统开始启动的是FallbackHome这个"桌面"。03-1316:58:41.35943......
  • Android14音频进阶:生产者与消费者模型(六十二)
    简介:CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!优质专栏:Audio工程师进阶系列【原创干货持续更新中……】......
  • STM32模拟IIC读取ACD10红外二氧化碳数据
    引脚介绍ACD10通过IIC来通信我们使用下图右边四个引脚就可以了,系统默认模式为IIC通信方式,他也支持USART串口通信不过需要配置pin5引脚(低电平)。模拟IIC通信配置比较简单,在单片机上面随便找两个引脚就可以。用来配置SDA数据与SCL时钟引脚。读取数据命令官方给我们命令行列......
  • d3d12龙书阅读----Direct3D的初始化
    d3d12龙书阅读----Direct3D的初始化使用d3d我们可以对gpu进行控制与编程,以硬件加速的方式来完成3d场景的渲染,d3d层与硬件驱动会将相应的代码转换成gpu可以执行的机器指令,与之前的版本相比,d3d12大大减少了cpu的开销,同时也改进了对多线程的支持,但是使用的api也更加复杂。接下来,我......
  • Codeforces 1446D1 Frequency Problem (Easy Version)
    考虑求出全局的众数\(A\)。那么有一个结论,就是答案区间的众数中绝对有\(A\)。考虑反证法,如果没有\(A\),\(A\)在序列中出现的个数一定\(\ge\)区间内众数的出现个数,所以可以一直往外扩展直到\(A\)出现的个数与区间内非\(A\)众数的个数持平,这样肯定更优。于是可以考虑钦......
  • Seed10
           ......
  • 7. LCD1602自动巡检方式显示16路温度数据的编程实现
    在多路温度数据,多路压力数据或者多路其它数据采集的过程中,我们借用一个屏幕来显示的时候,一般选用两种模式:自动巡检模式:上电的时候默认的就是这种模式,上节课使用了4个菜单,也就是4个屏,每个屏采集了4路数据,这样的话就相当于让其处于自动巡检的模式,每隔一定的时间来切换一个界面,从而......
  • (17)Lazarus学习之StringGrid1
    01]下拉ComboBox1选择  参考:C:\lazarus\examples\gridexamples\gridcelleditorprocedureTForm1.StringGrid1SelectEditor(Sender:TObject;aCol,aRow:Integer;varEditor:TWinControl);beginif(aCol=3)and(aRow>0)thenbegin//哪些单元格显示Comb......
  • D11-cxGrid导出Excl亲测OK
    需要引用uses  cxGridExportLink;procedureTForm1.dxBarLargeButton5Click(Sender:TObject);varSaveDialog:TSaveDialog;path:string;//路径信息ExcelAPP:Variant;//变体变量beginSaveDialog:=TSaveDialog.Create(nil);path:='';trywithSaveD......
  • ZOI round1 数轴
    不错的思维题。为了将问题一般化,令\(N=0\),若\(N\ne0\),则可以将\(N\)视为原点,令\(x_i\leftarrowx_i-N\)。我们要求解走\(t\)个\(1\)单位从原点走到\(x\)的方案数。显然,走\(1\)单位可以走到\(1,-1\)。同样,走\(2\)单位可以走到\(2,0,-2\),其中走到\(0\)的方......