Например, vector<vector<pair<int, int>>>, где каждый внутренний vector<pair<int, int>> содержит рёбра, ведущие из вершины с соответствующим индексом, а каждая pair<int, int> - это пункт назначения и вес ребра.
dalbio,
Построить просто - для каждого ребра u,v делайте next[u].push_back(v);. Если граф неориентированный, то симметрично добавляйте u в вектор для v.
Сначала не забудте выделить сам вектор: next.resize(n+1);