src/graph/ds/amat/lib.hpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #pragma once | ||
| 2 | |||
| 3 | #include "../graph_c/lib.hpp" | ||
| 4 | |||
| 5 | namespace tifa_libs { | ||
| 6 | namespace amat_impl_ { | ||
| 7 | template <class T, class... Info> | ||
| 8 | class amat_tag : public graph_info_impl_::graph_tag_base<Info...> { | ||
| 9 | using base_t = graph_info_impl_::graph_tag_base<Info...>; | ||
| 10 | using ET = std::conditional_t<std::is_void_v<T>, u32, T>; | ||
| 11 | struct iter_ { | ||
| 12 | using iter_t = vec<ET>::const_iterator; | ||
| 13 | iter_t it, bgn, ed; | ||
| 14 | CEXP iter_(iter_t begin, iter_t end) NE : it(begin), bgn(begin), ed(end) { nomalize(), bgn = it; } | ||
| 15 | |||
| 16 | CEXP auto begin() CNE { return iter_{bgn, ed}; } | ||
| 17 | CEXP auto end() CNE { return iter_{ed, ed}; } | ||
| 18 | |||
| 19 | CEXP auto operator*() CNE { return *it; } | ||
| 20 | CEXP iter_& operator++() NE { | ||
| 21 | ++it, nomalize(); | ||
| 22 | return *this; | ||
| 23 | } | ||
| 24 | CEXP bool operator!=(iter_ const& r) CNE { return it != r.it; } | ||
| 25 | |||
| 26 | private: | ||
| 27 | CEXP void nomalize() NE { | ||
| 28 | while (it != ed && *it == ET{}) ++it; | ||
| 29 | } | ||
| 30 | }; | ||
| 31 | vec<ET> g; | ||
| 32 | u32 n_; | ||
| 33 | |||
| 34 | protected: | ||
| 35 | using val_t = T; | ||
| 36 | 824 | CEXPE amat_tag(u32 n, ET const null = {}) NE : base_t(n), g(n* n, null), n_(n) { | |
| 37 |
22/22tifa_libs::amat_impl_::amat_tag<long>::amat_tag(unsigned int, long):
✓ Branch 1 taken 2276 times.
✓ Branch 2 taken 50 times.
tifa_libs::amat_impl_::amat_tag<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<16l> >>::amat_tag(unsigned int, tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<16l> >):
✓ Branch 2 taken 4440 times.
✓ Branch 3 taken 44 times.
tifa_libs::amat_impl_::amat_tag<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<17l> >>::amat_tag(unsigned int, tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<17l> >):
✓ Branch 2 taken 2668 times.
✓ Branch 3 taken 11 times.
tifa_libs::amat_impl_::amat_tag<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >>::amat_tag(unsigned int, tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >):
✓ Branch 2 taken 7108 times.
✓ Branch 3 taken 55 times.
tifa_libs::amat_impl_::amat_tag<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<16l> >>::amat_tag(unsigned int, tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<16l> >):
✓ Branch 2 taken 4440 times.
✓ Branch 3 taken 44 times.
tifa_libs::amat_impl_::amat_tag<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<17l> >>::amat_tag(unsigned int, tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<17l> >):
✓ Branch 2 taken 2668 times.
✓ Branch 3 taken 11 times.
tifa_libs::amat_impl_::amat_tag<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<16l> >>::amat_tag(unsigned int, tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<16l> >):
✓ Branch 2 taken 4440 times.
✓ Branch 3 taken 44 times.
tifa_libs::amat_impl_::amat_tag<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<17l> >>::amat_tag(unsigned int, tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<17l> >):
✓ Branch 2 taken 2668 times.
✓ Branch 3 taken 11 times.
tifa_libs::amat_impl_::amat_tag<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >>::amat_tag(unsigned int, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >):
✓ Branch 2 taken 7108 times.
✓ Branch 3 taken 55 times.
tifa_libs::amat_impl_::amat_tag<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<1000003ul> >>::amat_tag(unsigned int, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<1000003ul> >):
✓ Branch 2 taken 1326 times.
✓ Branch 3 taken 32 times.
tifa_libs::amat_impl_::amat_tag<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >>::amat_tag(unsigned int, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >):
✓ Branch 2 taken 7108 times.
✓ Branch 3 taken 55 times.
|
46662 | flt_ (u32, i, 0, n) g[i * n + i] = ET{}; |
| 38 | 412 | } | |
| 39 | |||
| 40 | public: | ||
| 41 | CEXP void build() CNE {} | ||
| 42 | 13688809 | CEXP void add_arc(u32 u, u32 v, cT_(ET) w = 1) NE { g[u * n_ + v] = w, base_t::add_arc(u, v); } | |
| 43 | 412 | ND CEXP u32 vsize() CNE { return n_; } | |
| 44 | |||
| 45 | CEXP auto CR operator[](u32 u) CNE { return iter_{g.begin() + u * n_, g.begin() + (u + 1) * n_}; } | ||
| 46 | 42324457 | ND CEXP auto val(u32 u, u32 v) CNE { return g[u * n_ + v]; } | |
| 47 | 5381170 | CEXP void set_val(u32 u, u32 v, cT_(ET) w) NE { g[u * n_ + v] = w; } | |
| 48 | }; | ||
| 49 | } // namespace amat_impl_ | ||
| 50 | template <class Et = void, class... Info> | ||
| 51 | using amat = graph_impl_::graph<amat_impl_::amat_tag<Et, Info...>>; | ||
| 52 | |||
| 53 | } // namespace tifa_libs | ||
| 54 |