邻接表存储小技巧

邻接表的存储

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

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

#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条边终点;
}

发布了37 篇原创文章 · 获赞 11 · 访问量 1954

猜你喜欢

转载自blog.csdn.net/weixin_42750325/article/details/102209553
今日推荐