結果

問題 No.1147 土偶Ⅱ
ユーザー ID 21712
提出日時 2026-06-07 02:44:50
言語 Go
(1.26.1)
コンパイル:
env GOCACHE=/tmp go build _filename_
実行:
./Main
結果
AC  
実行時間 6 ms / 500 ms
コード長 2,750 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 15,834 ms
コンパイル使用メモリ 276,048 KB
実行使用メモリ 6,400 KB
最終ジャッジ日時 2026-06-07 02:45:07
合計ジャッジ時間 15,285 ms
ジャッジサーバーID
(参考情報)
judge1_0 / judge3_0
純コード判定待ち
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 20
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

package main

import . "fmt"

const INF int = 1e18+3

func main() {
	var n,m int
	Scan(&n,&m)
	
	table := make([][]int, n)
	for i := range table {
		table[i] = make([]int, n)
		for j := range table[i] {
			table[i][j] = INF
		}
		table[i][i] = 0
	}
	
	for i := 0; i < m; i++ {
		var a, b int
		Scan(&a,&b)
		a--
		b--
		table[a][b] = 1
		table[b][a] = 1
	}
	
	for i := 0; i < n; i++ {
		for j := 0; j < n; j++ {
			for k := 0; k < n; k++ {
				if table[j][k] > table[j][i] + table[i][k] {
					table[j][k] = table[j][i] + table[i][k]
				}
			}
		}
	}
	
	// println(Sprintf("%#v", table))
	
	ans := 0
	for i := 0; i < n; i++ {
		for j := i+1; j < n; j++ {
			if table[i][j] == 2 {
				continue
			}
			for k := j+1; k < n; k++ {
				if table[j][k] == 2 || table[i][k] == 2 {
					continue
				}
				ans++
			}
		}
	}
	Println(ans)
}

/*
考察

問題文がよくわからんが
友達関係でグラフを作ったとき
距離が2以下の関係は「良い関係ではない」
距離が3以上もしくは連結していないのを「良い関係である」
としている感じ?
フロイドワーシャルして相互距離求めたあと組み合わせ総当たりでカウントする感じ?
違うっぽい

サンプルは距離2の関係だけ除外すると答えが一致するが
これは問題解釈と一致しない
わけわからん

どうも1つ目の
・「良い関係」にある土偶は、友達の友達関係ではない。
だけが良い関係の条件で

2つ目の
・友達の友達には、自分や自分の友達は含まれない。
これは「良い関係」の条件ではなく
「友達の友達」の説明…?
XとYが友達の場合、自分Xから見たらYは友達で、友達Yから見たら自分Xは友達で、
自分Xから見た友達Yの友達には自分Xも含まれるので、XとYが友達の場合は上記条件を満たさない(つまりXとYは友達の友達という関係ではない???意味が分からない)
読解力が無さ過ぎて解釈できない…
うーん、
XとYが友達で、YとZが友達で、XとZが友達の場合
Xから見た場合、Zは友達Yの友達なので、XとZは友達の友達の関係、のように解釈できるが、上記条件によりXとZは直接の友達でもあるため、XとZは友達の友達という関係にはしない、ということか?
ややこしい
うーん、なるほど
XとYが友達のとき、XにとってX自身も友達の友達と解釈可能になるが、上記条件に従い、友達の友達とは解釈しない、
ってことか…?

要するに、最短距離がちょうど2になる関係ときだけ友達の友達と定義する、ってことを言いたいのか

*/
0