PS:邻接表可以解决重复边的问题

static int head[] = new int[1005]; // 存放链头
static edge[] e = new edge[1005];
static int len; // 边的个数

//添加有向边
static void add(int u, int v, int w) {      //添加 u指向v 这条边,权值为w
	e[len] = new edge(v, w, head[u]); // 前插法
	head[u] = len++; // 将u指向新添加的边
}

//添加无向边
static void add2(int u, int v, int w) {
	add(u, v, w);
	add(v, u, w);
}

class edge {
	int v, w, next; //next 表示下一个指向

	public edge(int v, int w, int next) {
		this.v = v;
		this.w = w;
		this.next = next;
	}

	public edge() {
	}
}