teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2020/10/15 04:30

投稿

yudedako67
yudedako67

スコア2052

answer CHANGED
@@ -1,2 +1,15 @@
1
1
  線の数は、三角形の数×3 - 二つの三角形に共有されている辺の数 で出ます。
2
- 共有されてる辺の数はハッシュで管理すれば辺の数に比例する計算量で数えられます。
2
+ 共有されてる辺の数はハッシュで管理すれば辺の数に比例する計算量で数えられます。
3
+
4
+ ---
5
+
6
+ ハッシュで辺を管理する場合の頂点が入れ替わっただけの辺について
7
+
8
+ 一つは正規化をするという方法
9
+ つまり、(i, j)という辺があったとき i > j ならiとjを入れ替えるというような操作を加えて順番による影響がないようにできます。
10
+
11
+ もう一つは今回の問題限定で、E行列において頂点は反時計回りに現れるので同じ辺が2度現れるなら、必ず頂点の順番は逆になります。なので、そのコードでいうとAに逆順で辺を入れると以前に現れた同じ辺だけカウントできます。
12
+
13
+
14
+ あとはぶっちゃけ想定解が何かという話になってくるので、ハッシュってなんだ?って状態なのであれば、おそらく違う方法を使うべきなんだと思います。
15
+ 例えば連結成分の数が1であることがわかってるだとか、DFSやBFSについて勉強してるという前提であれば、頂点数+三角形の数-連結成分の数 で求めることが想定されてるのかもしれません。