From 6c16185126a286b8153031488960a3af8200321b Mon Sep 17 00:00:00 2001 From: Barrett Ruth Date: Fri, 7 Mar 2025 18:03:28 -0500 Subject: [PATCH] feat(cf): 891 g --- codeforces/891/d.cc | 8 +- codeforces/891/d.out | 2 +- codeforces/891/g.cc | 175 +++++++++++++++++++++++++++++++++++++++++++ codeforces/891/g.in | 22 ++++++ codeforces/891/g.out | 7 ++ 5 files changed, 209 insertions(+), 5 deletions(-) create mode 100644 codeforces/891/g.cc create mode 100644 codeforces/891/g.in create mode 100644 codeforces/891/g.out diff --git a/codeforces/891/d.cc b/codeforces/891/d.cc index 1b48d5b..42e9af8 100644 --- a/codeforces/891/d.cc +++ b/codeforces/891/d.cc @@ -83,10 +83,10 @@ void solve() { ve ans; for (int i = 0; i < n; ++i) { auto diff = a[i] - b[i]; - if (diff > best_diff) { - best_diff = diff; - ans = {i}; - } else if (diff == best_diff) { + if (diff > best_diff) + ans.clear(); + best_diff = max(best_diff, diff); + if (diff >= best_diff) { ans.eb(i); } } diff --git a/codeforces/891/d.out b/codeforces/891/d.out index 8ba5580..91ae1d7 100644 --- a/codeforces/891/d.out +++ b/codeforces/891/d.out @@ -10,4 +10,4 @@ 2 3 [code]: 0 -[time]: 14.0336 ms +[time]: 14.0815 ms \ No newline at end of file diff --git a/codeforces/891/g.cc b/codeforces/891/g.cc new file mode 100644 index 0000000..a04bd12 --- /dev/null +++ b/codeforces/891/g.cc @@ -0,0 +1,175 @@ +#include // {{{ + +// https://codeforces.com/blog/entry/96344 + +#pragma GCC optimize("O2,unroll-loops") +#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") + +using namespace std; + +template +[[nodiscard]] static T MIN() { + return std::numeric_limits::min(); +} + +template +[[nodiscard]] static T MAX() { + return std::numeric_limits::max(); +} + +template +[[nodiscard]] static T sc(auto&& x) { + return static_cast(x); +} + +template +[[nodiscard]] static T sz(auto&& x) { + return static_cast(x.size()); +} + +#define prln(...) std::println(__VA_ARGS__) +#define pr(...) std::print(__VA_ARGS__) + +#ifdef LOCAL +#define dbgln(...) std::println(__VA_ARGS__) +#define dbg(...) std::print(__VA_ARGS__) +#endif + +inline static void NO() { + prln("NO"); +} + +inline static void YES() { + prln("YES"); +} + +using ll = long long; +using ld = long double; +template +using ve = std::vector; +template +using ar = std::array; +template +using pa = std::pair; +template +using tu = std::tuple; +template +using dq = std::deque; +template +using qu = std::queue; +template +using pq = std::priority_queue; +template +using st = std::stack; +auto lb = [](auto... args) { + return std::lower_bound(args...); +}; +auto ub = [](auto... args) { + return std::upper_bound(args...); +}; + +#define ff first +#define ss second +#define eb emplace_back +#define pb push_back +#define all(x) (x).begin(), (x).end() +#define rall(x) (x).rbegin(), (x).rend() +// }}} + +template +struct union_find { + public: + explicit union_find(size_t capacity) + : par(capacity), rank(capacity, 0), size(capacity, 1) { + iota(all(par), 0); + }; + + void join(T u, T v) noexcept { + u = find(u), v = find(v); + + if (u == v) + return; + + if (rank[u] < rank[v]) + std::swap(u, v); + + if (rank[u] == rank[v]) + ++rank[u]; + + par[v] = u; + size[u] += size[v]; + size[v] = size[u]; + } + + [[nodiscard]] T find(T const& u) noexcept { + if (u != par[u]) + par[u] = find(par[u]); + return par[u]; + } + + std::vector par; + std::vector rank; + std::vector size; +}; + +constexpr static int MOD = 998244353; + +long long modpow(long long a, long long b, + long long mod = std::numeric_limits::max()) { + long long ans = 1; + a %= mod; + while (b > 0) { + if (b & 1) { + ans *= a; + ans %= MOD; + } + a *= a; + a %= MOD; + b >>= 1; + } + return ans; +} + +void solve() { + int n; + ll S; + cin >> n >> S; + ve> e; + + for (int i = 0; i < n - 1; ++i) { + int u, v; + ll w; + cin >> u >> v >> w; + e.eb(w, u, v); + } + + sort(all(e)); + + union_find uf(n + 1); + ll ans = 1; + + for (auto& [w, u, v] : e) { + ans = (ans * modpow(S - w + 1, + (1LL * uf.size[uf.find(u)] * uf.size[uf.find(v)] - 1), + MOD)) % + MOD; + uf.join(u, v); + } + + prln("{}", ans); +} + +int main() { // {{{ + cin.tie(nullptr)->sync_with_stdio(false); + cin.exceptions(cin.failbit); + + int t = 1; + cin >> t; + + while (t--) { + solve(); + } + + return 0; +} +// }}} diff --git a/codeforces/891/g.in b/codeforces/891/g.in new file mode 100644 index 0000000..5c36ad5 --- /dev/null +++ b/codeforces/891/g.in @@ -0,0 +1,22 @@ +4 +2 5 +1 2 4 +4 5 +1 2 2 +2 3 4 +3 4 3 +5 6 +1 2 3 +1 3 2 +3 4 6 +3 5 1 +10 200 +1 2 3 +2 3 33 +3 4 200 +1 5 132 +5 6 1 +5 7 29 +7 8 187 +7 9 20 +7 10 4 diff --git a/codeforces/891/g.out b/codeforces/891/g.out new file mode 100644 index 0000000..114b5e5 --- /dev/null +++ b/codeforces/891/g.out @@ -0,0 +1,7 @@ +1 +8 +80 +650867886 + +[code]: 0 +[time]: 14.3304 ms \ No newline at end of file