public static List<Edge> kruskal(Node c) {
		Queue<Edge> pq=new PriorityQueue<>((a,b)->a.w-b.w);
		List<Node> nodes=bfs_helper(c, pq);
		Map<Node, Integer> map=new HashMap<>();
		UnionFind u=new UnionFind(nodes.size());
		int i=0;
		for (Node t:nodes) 
			map.put(t, i++);
		List<Edge> rel=new ArrayList<>();
		for (i=1;i<nodes.size()&&!pq.isEmpty();) {
			Edge e=pq.poll();
			Node a=e.a, b=e.b;
			int x=map.get(a), y=map.get(b);
			if (u.findSet(x)!=u.findSet(y)) {
				u.union(x, y);
				++i;
				rel.add(e);
			}
		}
		return rel;
	}