(英語力がないので関数名が…)
(英語力がないので関数名が…)
UnionFind で連結状態持ちながら 10**6 から降順に辺を追加していくだけ。CDEF の中で一番簡単まである。
UnionFind で連結状態持ちながら 10**6 から降順に辺を追加していくだけ。CDEF の中で一番簡単まである。
Happy to see the the UnionFind good
I just completed "Playground" - Day 8 - Advent of Code 2025 #AdventOfCode adventofcode.com/2025/day/8
Happy to see the the UnionFind good
I just completed "Playground" - Day 8 - Advent of Code 2025 #AdventOfCode adventofcode.com/2025/day/8
なんか謎のUnionFind系データ構造が転がってるけど、あんまり使わないから忘れかけてたし、名前もごっちゃになってる
自分でつけた名前なのに
なんか謎のUnionFind系データ構造が転がってるけど、あんまり使わないから忘れかけてたし、名前もごっちゃになってる
自分でつけた名前なのに
僕のUnionFindの実装見たら、すでにちゃんと集合サイズが大きい方にuniteするようになってた
僕のUnionFindの実装見たら、すでにちゃんと集合サイズが大きい方にuniteするようになってた
自作ライブラリ整備してたらたまたまみつけた謎のデータ構造RepresentedUnionFind(結合UnionFind)で一撃だったけどナニコレ
G問題は式をコネコネして因数分解して約数列挙
Y=(与式)としてなんやかんやすると(2Y+2n+1)(2Y-2n-1)=4X-1という式が得られる
右辺は定数なので、4X-1の約数を列挙していって左辺の因数にそれぞれ当てはめて連立方程式を2つ作り、それぞれ解いてnの値を求める
実は約数列挙は片方が正の約数になることを仮定してよかったりする
自作ライブラリ整備してたらたまたまみつけた謎のデータ構造RepresentedUnionFind(結合UnionFind)で一撃だったけどナニコレ
G問題は式をコネコネして因数分解して約数列挙
Y=(与式)としてなんやかんやすると(2Y+2n+1)(2Y-2n-1)=4X-1という式が得られる
右辺は定数なので、4X-1の約数を列挙していって左辺の因数にそれぞれ当てはめて連立方程式を2つ作り、それぞれ解いてnの値を求める
実は約数列挙は片方が正の約数になることを仮定してよかったりする
https://developers.techouse.com/entry/union-find
https://developers.techouse.com/entry/union-find
この方針のままだと余計に切りすぎてしまう可能性があるので、逆転の発想
一旦全部切って、つなげ直しても大丈夫そうならつなげ直す
UnionFindで連結成分の個数を管理すれば簡単
この方針のままだと余計に切りすぎてしまう可能性があるので、逆転の発想
一旦全部切って、つなげ直しても大丈夫そうならつなげ直す
UnionFindで連結成分の個数を管理すれば簡単
5完でした
A: n>1000W/B⇔n>⌊1000W/B⌋
B: 種類でグループ化
C: 可能な高度の範囲と目標高度の範囲の共通部分を管理
D: imos法で各マスについて雲の個数を数え、2次元累積和を用いて各雲の範囲内で雲が1個のマスの個数を求める
E: UnionFindを用いて行き先のマスが干渉するウサギをグループ化
5完でした
A: n>1000W/B⇔n>⌊1000W/B⌋
B: 種類でグループ化
C: 可能な高度の範囲と目標高度の範囲の共通部分を管理
D: imos法で各マスについて雲の個数を数え、2次元累積和を用いて各雲の範囲内で雲が1個のマスの個数を求める
E: UnionFindを用いて行き先のマスが干渉するウサギをグループ化
That’s basically Union-Find.
This autism-friendly coding tutorial makes it click:
🎥 youtu.be/IJuupDWkzqE
#UnionFind #AutisticDev #GraphAlgorithms #CodingForBeginners #LearnToCode #NeurodivergentTech
That’s basically Union-Find.
This autism-friendly coding tutorial makes it click:
🎥 youtu.be/IJuupDWkzqE
#UnionFind #AutisticDev #GraphAlgorithms #CodingForBeginners #LearnToCode #NeurodivergentTech
確かにその通りですね...(納得)
mjtaiさんの提出コードも見たのですが、UnionFindで管理しつつedgesを組み立ててるのを見て、木が組み立てられていく様子がイメージできました。
一瞬別の場所、たとえばv1とv3間に、v0とv1間の直接結合コストよりも小さな間接的な結合コスト(例v1-v2-v3)があったらどうしよう...と思いましたが、それはv0とv1間の話には関係ないですね。
確かにその通りですね...(納得)
mjtaiさんの提出コードも見たのですが、UnionFindで管理しつつedgesを組み立ててるのを見て、木が組み立てられていく様子がイメージできました。
一瞬別の場所、たとえばv1とv3間に、v0とv1間の直接結合コストよりも小さな間接的な結合コスト(例v1-v2-v3)があったらどうしよう...と思いましたが、それはv0とv1間の話には関係ないですね。
ABC 3完 50位/109人中
A: 困難 WA出しまくり結局BとCの後で通った
B: シミュるようなことをやる
C: UnionFind 1024本持ち
ABC 3完 50位/109人中
A: 困難 WA出しまくり結局BとCの後で通った
B: シミュるようなことをやる
C: UnionFind 1024本持ち
木を根付き木とみなすと、葉にある陽電子や電子は上にしか行けなくて、陽電子と電子は最小共通祖先で対消滅したいことがわかる
これをDFSっぽい木DPで表現する
F問題は解けなかった
クエリ2をセグメントツリーの配列、クエリ3をUnionFindで高速に解決できそうだったけど、すでに連結している2頂点をクエリ2でご検知するケースに対処できず終了
もう少し気づくのが早ければ……
木を根付き木とみなすと、葉にある陽電子や電子は上にしか行けなくて、陽電子と電子は最小共通祖先で対消滅したいことがわかる
これをDFSっぽい木DPで表現する
F問題は解けなかった
クエリ2をセグメントツリーの配列、クエリ3をUnionFindで高速に解決できそうだったけど、すでに連結している2頂点をクエリ2でご検知するケースに対処できず終了
もう少し気づくのが早ければ……
A `next_permutation` 使ったけど、最大の値を右辺に持っていけば使うまでもないか
B `exists` 配列作って全探索
C むずい。落ち着いて日本語を読む。
D 各配列 `A` はあらかじめソートしておく。`O(N**2)` のループを回す。ループ内ではマージテク的な発想で小さい方の配列を全探索、大きい方に同じ値が何個あるかを調べて確率を求める。
E UnionFind でダブった辺を接続に使う
F `P` を逆順に舐めていって PBDS で殴った
G NTT で畳み込み。係数があんまり大きくならないし、浮動小数点数で FFT でも誤差生じないので可。
A `next_permutation` 使ったけど、最大の値を右辺に持っていけば使うまでもないか
B `exists` 配列作って全探索
C むずい。落ち着いて日本語を読む。
D 各配列 `A` はあらかじめソートしておく。`O(N**2)` のループを回す。ループ内ではマージテク的な発想で小さい方の配列を全探索、大きい方に同じ値が何個あるかを調べて確率を求める。
E UnionFind でダブった辺を接続に使う
F `P` を逆順に舐めていって PBDS で殴った
G NTT で畳み込み。係数があんまり大きくならないし、浮動小数点数で FFT でも誤差生じないので可。
A 区間が3個以上重なっていたら0
そうでない場合、重なっている区間をUnionFindで連結して、連結成分ごとに2通りずつ
B 重い荷物から順に、各袋に均等に分けていく
空いた部分はより軽い荷物で(個数が十分あれば)ちょうど埋められる
C 偶奇の方針も5x5の埋め方も全て分かっていたのに、returnを2箇所入れ忘れたせいで黄パフォを逃しました
最悪
本当に最悪
(22時頃にWAだったコードにreturnを足したらACになった)
A 区間が3個以上重なっていたら0
そうでない場合、重なっている区間をUnionFindで連結して、連結成分ごとに2通りずつ
B 重い荷物から順に、各袋に均等に分けていく
空いた部分はより軽い荷物で(個数が十分あれば)ちょうど埋められる
C 偶奇の方針も5x5の埋め方も全て分かっていたのに、returnを2箇所入れ忘れたせいで黄パフォを逃しました
最悪
本当に最悪
(22時頃にWAだったコードにreturnを足したらACになった)
High-performance Rust + Python decoder for quantum error correction with UnionFind, Blossom (MWPM), BP-OSD, and batch decoding support.
pip install qector-decoder-v3
pypi.org/project/qect...
#QuantumComputing #QEC #Rust #Python #Dev
High-performance Rust + Python decoder for quantum error correction with UnionFind, Blossom (MWPM), BP-OSD, and batch decoding support.
pip install qector-decoder-v3
pypi.org/project/qect...
#QuantumComputing #QEC #Rust #Python #Dev
E:最小全域木作って条件満たすか調べる
F:マージテクで小さい方を適宜塗り替えていく。UnionFindに黒の個数持たせて適宜更新する
G:解説と同じようにサイクル基底からxor基底求めて各頂点までの重みの最小値を出してTrieに入れて数えて…とやったけど合わず
まあサイクルを基底を初めて使えたのはよかった
E:最小全域木作って条件満たすか調べる
F:マージテクで小さい方を適宜塗り替えていく。UnionFindに黒の個数持たせて適宜更新する
G:解説と同じようにサイクル基底からxor基底求めて各頂点までの重みの最小値を出してTrieに入れて数えて…とやったけど合わず
まあサイクルを基底を初めて使えたのはよかった
とりあえず各A_iの約数を列挙して、約数からAの添字を得られるようにしておく
約数を大きい方から舐めていって、同じ約数の添字同士をUnionFindでmergeしていって、新しくmergeしたところだけ約数の値だけコストを加算
どうせ全部連結にするので、隣り合うやつを全部結合しようとして良くて、そこは線形時間で済む
とりあえず各A_iの約数を列挙して、約数からAの添字を得られるようにしておく
約数を大きい方から舐めていって、同じ約数の添字同士をUnionFindでmergeしていって、新しくmergeしたところだけ約数の値だけコストを加算
どうせ全部連結にするので、隣り合うやつを全部結合しようとして良くて、そこは線形時間で済む
重み c の辺 uv の追加は......
・uf[c] 上で uv が連結 → 変化なし
・連結でない → uf[c]、uf[c+1]、...... で uv をマージしていき、uf[c'] で既に uv が連結だったとする。このとき MST の重みが c'-c だけ増えることが分かる
重み c の辺 uv の追加は......
・uf[c] 上で uv が連結 → 変化なし
・連結でない → uf[c]、uf[c+1]、...... で uv をマージしていき、uf[c'] で既に uv が連結だったとする。このとき MST の重みが c'-c だけ増えることが分かる