template <const int V, const int E>
struct MultiList {
int e, head[V], next[E + 1], to[E + 1];
MultiList() : e(1) { }
void add( int v, int x ) {
assert(e <= E);
to[e] = x, next[e] = head[v], head[v] = e++;
}
};
MultiList<10, 100> g; // граф из 10 вершин, не более чем 100 рёбер
g.add(2, 3); // ребро из 2 в 3
for (int e = g.head[v]; e; e = g.next[e]) {
// перебор рёбр из вершины v: e -> g.to[e]
}