This documentation is automatically generated by online-judge-tools/verification-helper
#include "Src/Graph/ShortestPath/Edge.hpp"
#pragma once
#include "../../Template/TypeAlias.hpp"
namespace zawa {
namespace internal {
class Edge {
protected:
static constexpr u32 INVALID{static_cast<u32>(-1)};
public:
u32 parent{INVALID};
u32 id{INVALID};
Edge() = default;
Edge(u32 parent, u32 id) : parent{parent}, id{id} {}
Edge& operator=(const Edge& edge) {
parent = edge.parent;
id = edge.id;
return *this;
}
inline bool exist() const noexcept {
return parent != INVALID;
}
static constexpr u32 invalid() noexcept {
return INVALID;
}
};
template <class Weight>
class WeightedEdge : public Edge {
public:
Weight weight{INVALID};
WeightedEdge() = default;
WeightedEdge(u32 parent, const Weight& weight, u32 id)
: Edge{parent, id}, weight{weight} {}
WeightedEdge& operator=(const WeightedEdge& edge) {
parent = edge.parent;
id = edge.id;
weight = edge.weight;
return *this;
}
};
} // namespace internal
} // namespace zawa
#line 2 "Src/Graph/ShortestPath/Edge.hpp"
#line 2 "Src/Template/TypeAlias.hpp"
#include <cstdint>
#include <cstddef>
namespace zawa {
using i16 = std::int16_t;
using i32 = std::int32_t;
using i64 = std::int64_t;
using i128 = __int128_t;
using u8 = std::uint8_t;
using u16 = std::uint16_t;
using u32 = std::uint32_t;
using u64 = std::uint64_t;
using usize = std::size_t;
} // namespace zawa
#line 4 "Src/Graph/ShortestPath/Edge.hpp"
namespace zawa {
namespace internal {
class Edge {
protected:
static constexpr u32 INVALID{static_cast<u32>(-1)};
public:
u32 parent{INVALID};
u32 id{INVALID};
Edge() = default;
Edge(u32 parent, u32 id) : parent{parent}, id{id} {}
Edge& operator=(const Edge& edge) {
parent = edge.parent;
id = edge.id;
return *this;
}
inline bool exist() const noexcept {
return parent != INVALID;
}
static constexpr u32 invalid() noexcept {
return INVALID;
}
};
template <class Weight>
class WeightedEdge : public Edge {
public:
Weight weight{INVALID};
WeightedEdge() = default;
WeightedEdge(u32 parent, const Weight& weight, u32 id)
: Edge{parent, id}, weight{weight} {}
WeightedEdge& operator=(const WeightedEdge& edge) {
parent = edge.parent;
id = edge.id;
weight = edge.weight;
return *this;
}
};
} // namespace internal
} // namespace zawa