配一张图:
比如H[1] 下面有四个数(-1也是的) -1,0, 3, 5;
就说明A[0] 是点 1 的弧头, A[3] 是 1 的弧头, A[5] 也是1 的弧头; 但是一个数组的一个小单元之能存一个数怎么办呢, 这个时候就是next的用处了;
我们让next[5] 指向数组下标3就可以了, 让next[3]指向数组下标0, 同理, 让next[1] 指向一个数-1, 就代表没法在传递了,就是没有其他边的意思
所以可以看到next数组(就是图上的大N), 上面的箭头, 意思懂了吧;
H数组下面的几个数都是下标, 看到了吗, 没有一个重复的, 这是必然的, 因为每一条边只能被指向一次
引用头文件:string.h
使用宏定义:#define CLR(arr,val) memset(arr,val,sizeof(arr))
下面弧头弧尾说反了, 自行纠正
使用说明:每次使用前必须要先调用Init()函数,AddEdge()用来加边。
#include <iostream>
#include <iostream>
#include <algorithm>
#include <queue>
#include <malloc.h>
#include <string.h>
using namespace std;
const int MAXN=1001;
#define CLR(arr,val) memset(arr,val,sizeof(arr));
template<