邻接表的存储
我也不知道我邻接表为何那么菜
主要适用于稀疏图(比矩阵省空间)
#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条边终点;
}