邻接表存储小技巧

邻接表的存储

我也不知道我邻接表为何那么菜

主要适用于稀疏图(比矩阵省空间)

#include <bits/stdc++.h>
using namespace std;
int next[N],first[N],to[N],val[N],tot;
//tot 第几条边;val 边的权值;
void add(int x,int y,int z){
	next[++tot]=first[x];//++tot 增加一条从x出发边
	//与tot这条边相邻的边是first[x],即从x出发的上一条边
	first[x]=tot;//更新first[x] 把size当从x出发的当前最后一条边;
	to[tot]=y;//记录tot这条边终点编号
	val[tot]=z;
}

结合成对变换的位运算性质,初始化tot=1,则无向边(两条有向边)会成对存储在2,3(4,5)(6,7)上,通过对下标进行xor运算,可直接定位到与当前边反向的边 (from《算进》)(网络流有用)

伪码如下:

if(next[i]是第i条边终点`{
	next[i ^1]为第i条边终点;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值