#include <iostream>
#include <stdio.h>
#include<boost/graph/adjacency_list.hpp>
#include<boost/graph/dijkstra_shortest_paths.hpp>
#include<boost/graph/graph_traits.hpp>
using namespace boost;
int main() {
typedef typename boost::adjacency_list<vecS, vecS, directedS, no_property, property<edge_weight_t, int>> graph;
typedef std::pair<int, int> Edge;
//enum { a,b,c,d};
Edge edgeArray[] = { Edge(1,2),Edge(2,3),Edge(1,3),Edge(4,1)};
int w[] = { 1,2,5,2 };
graph G(edgeArray, edgeArray + sizeof(edgeArray) / sizeof(Edge), w, 4);
std::vector<int> d(4);
std::vector<boost::graph_traits<graph>::vertex_descriptor> p(4);
graph_traits<graph>::vertex_descriptor source = 1;
dijkstra_shortest_paths(G, source,
predecessor_map(make_iterator_property_map(p.begin(), get(vertex_index, G))).distance_map(make_iterator_property_map(d.begin(), get(vertex_index, G))));
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGU8Ym9vc3QvZ3JhcGgvYWRqYWNlbmN5X2xpc3QuaHBwPgojaW5jbHVkZTxib29zdC9ncmFwaC9kaWprc3RyYV9zaG9ydGVzdF9wYXRocy5ocHA+CiNpbmNsdWRlPGJvb3N0L2dyYXBoL2dyYXBoX3RyYWl0cy5ocHA+CgoKCnVzaW5nIG5hbWVzcGFjZSBib29zdDsKCgppbnQgbWFpbigpIHsKCXR5cGVkZWYgdHlwZW5hbWUgYm9vc3Q6OmFkamFjZW5jeV9saXN0PHZlY1MsIHZlY1MsIGRpcmVjdGVkUywgbm9fcHJvcGVydHksIHByb3BlcnR5PGVkZ2Vfd2VpZ2h0X3QsIGludD4+IGdyYXBoOwoJdHlwZWRlZiBzdGQ6OnBhaXI8aW50LCBpbnQ+IEVkZ2U7CgkvL2VudW0geyBhLGIsYyxkfTsKCglFZGdlIGVkZ2VBcnJheVtdID0geyBFZGdlKDEsMiksRWRnZSgyLDMpLEVkZ2UoMSwzKSxFZGdlKDQsMSl9OwoJaW50IHdbXSA9IHsgMSwyLDUsMiB9OwoKCWdyYXBoIEcoZWRnZUFycmF5LCBlZGdlQXJyYXkgKyBzaXplb2YoZWRnZUFycmF5KSAvIHNpemVvZihFZGdlKSwgdywgNCk7CgoJc3RkOjp2ZWN0b3I8aW50PiBkKDQpOwoJc3RkOjp2ZWN0b3I8Ym9vc3Q6OmdyYXBoX3RyYWl0czxncmFwaD46OnZlcnRleF9kZXNjcmlwdG9yPiBwKDQpOwoJCglncmFwaF90cmFpdHM8Z3JhcGg+Ojp2ZXJ0ZXhfZGVzY3JpcHRvciBzb3VyY2UgPSAxOwoKCWRpamtzdHJhX3Nob3J0ZXN0X3BhdGhzKEcsIHNvdXJjZSwgCgkJcHJlZGVjZXNzb3JfbWFwKG1ha2VfaXRlcmF0b3JfcHJvcGVydHlfbWFwKHAuYmVnaW4oKSwgZ2V0KHZlcnRleF9pbmRleCwgRykpKS5kaXN0YW5jZV9tYXAobWFrZV9pdGVyYXRvcl9wcm9wZXJ0eV9tYXAoZC5iZWdpbigpLCBnZXQodmVydGV4X2luZGV4LCBHKSkpKTsKCgkKCgoKCn0=