GCD of Reachable Nodes

2 secs 1024 MB
take44444's icon take44444

頂点ii1iN1 \leq i \leq N)から到達可能な頂点の集合SiS_iについて,SiS_iに含まれる頂点に書いてある数の最大公約数をGiG_iとします.

与えられた有向グラフを強連結成分分解したとき,同じ強連結成分に含まれる任意の22頂点uuvvについて,明らかにGu=GvG_u = G_vが成り立ちます.従って,まず強連結成分ごとにGCDを求め,次に,強連結成分を頂点とみなした有向非巡回グラフについてDFSの帰りがけ順に子頂点の値のGCDを求めていくことで,全ての頂点におけるGiG_iを,O((N+M)log(A))\mathrm{O}((N+M) \log (A))で求めることができます.

コード例(C++)