毎日格上の問題を解くやつの11日目です。1
問題リンク
問題概要
頂点 辺の無向グラフに以下の操作を施して木にできるか判定してできるなら実際にやってみてね。
- 頂点 間と頂点 間に辺を追加する。
解法
頂点数が偶数なら明らかに不可能です。
逆に、奇数であれば可能です。方法を言葉で説明するのが難しいので提出コードを見てほしい2のですが、だいたい以下のようなことをやっています。
- とすると、 個にグループ分けできる。
- すべてのグループをいい感じにつなげる。このとき、偶数番目のグループではすべての頂点は何かしらの奇数番目のグループにつなげる。
- 奇数番目のグループ内の頂点をつなげると、偶数番目もつながってくれる。
提出コード
import math def calc(a,b): return (b*K+a)%N N,K=map(int,input().split()) if N%2==0: print(-1) exit() num=math.gcd(N,K) ans=[] for i in range(0,num-1,2): for j in range((N//num-1)//2): ans.append((calc(i,j*2),calc(i+1,j*2))) ans.append((calc(i+1,N//num-1),calc(i+2,N//num-1))) for i in range(0,num,2): for j in range((N//num-1)//2):! ans.append((calc(i,j*2),calc(i,j*2+1))) print(len(ans)) for i in ans: print(*i)
Submission #46130072 - AtCoder Regular Contest 152
感想
自分が強くなってるのか問題が簡単めなのかわからぬ
空いた日にやってたこと
10日目3
【今日の精進】
— はるく@競プロ (@halc_kyopro) 2023年9月29日
ARC077E - guruguru
累積和の累積和とかいうおもしろいことを…
提出 #46041103 - AtCoder Regular Contest 077 https://t.co/ZMESMslSYv