/**
用邻接表添边是图论中基础中的基础,实用价值十分可观
添边为固定格式,理解的最好办法是画几个点,自己用手
模拟一下添边的过程,你会感慨万千,成就感不言而喻。。
链接表 3剑客为:edge[], edgeHead[], ne;
edge[] 为每条边得结构体,你可以在里面放任何附加东西
如:边权w, 流量c, 费用cost。 但v, next是最基本得两个
变量,这决定了链接表的正常工作。。edge[u].v 即表示边 u-v
edge[u].next 为u 连接的下条边在edge[]中的下标
edgeHead[u] 表示节点u 在edge[] 中的位置,通过edgeHead[u]和
edge[u].next 即可遍历连接u 的所有边,具体操作见下代码。
特级注意:edgeHead[] 和 ne 的初始化
*/
/**
匈牙利
*/
#include <cstring>
struct {
int v, next;
}edge[EMax];
int edgeHead[NMax], link[NMax], vis[NMax];
int ne, n; //初始化为1 //n 为匹配点的个数
//初始化edgeHead[]数组为0
void addEdge(int u, int v) {
edge[ne].v = v;
edge[ne].next = edgeHead[u];
edgeHead[u] = ne++;
}
bool dfs(int u) {
for (int i=edgeHead[u]; i; i=edge[i].next) {
int v = edge[i].v;
if (!vis[v]) {
vis[v] = tr