一般给出a,b节点,权值为w,我们可以创建结构体存储。
cnt全局变量,结构体存储的是边。
存储的是边的起点,终点,权值
node.to存储的是边的终点,node.nex存储的是起点相同的邻边,
node.v存储的是边的权值。
head[ ]数组保存的是边的序号,
如:1为根节点,2,3,4为子节点。
那么1,2为边的话,e[1].nex=0,head[1]=1;
1,3为边的话,e[2].nex=1,head[1]=2;
1,4为边的话,e[3].nex=2,head[1]=3;
所以当我们访问1,4的时候,通过序号可以得到兄弟节点与1的边(1,3),再可以得到1,2的边。
struct node{
//to 终点
//nex 下一条邻边
//v 边的权值
ll to,nex,v;
}e[size<<1+1];
void add(int a,int b,int w){
e[++cnt].to=b;
e[cnt].v=w;
e[cnt].nex=head[a]; //记录上一条邻边的序号
head[a]=cnt; //记录当前边的序号
}
//遍历x的子节点
for(int i=head[x];i!=0;i=e[i].nex)