結果
| 問題 |
No.1098 LCAs
|
| コンテスト | |
| ユーザー |
sgsw
|
| 提出日時 | 2021-08-17 22:06:57 |
| 言語 | Go (1.23.4) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 1,418 bytes |
| コンパイル時間 | 11,337 ms |
| コンパイル使用メモリ | 223,200 KB |
| 実行使用メモリ | 9,560 KB |
| 最終ジャッジ日時 | 2024-10-10 22:11:26 |
| 合計ジャッジ時間 | 13,195 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 RE * 2 |
| other | RE * 28 |
ソースコード
package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
var wg = bufio.NewScanner(os.Stdin)
const (
inf = int(1e18)
initialBufSize = int(1e6)
maxBufSize = int(1e6)
)
var buf []byte = make([]byte, initialBufSize)
type Graph struct {
n int
edges [][]int
}
func NewGraph(n int) *Graph {
g := &Graph{
n: n,
edges: make([][]int, n),
}
for i := 0; i < n; i++ {
g.edges[i] = make([]int, 0)
}
return g
}
func (g *Graph) AddEdge(u, v int) {
g.edges[u] = append(g.edges[u], v)
}
func main() {
n := nextInt()
g := NewGraph(n)
for i := 0; i < n-1; i++ {
u, v := nextInt(), nextInt()
u--
v--
g.AddEdge(u, v)
g.AddEdge(v, u)
}
//visited
dist := make([]int, n)
child := make([]int, n)
par := make([]int, n)
prev_sum := make([]int, n)
dp := make([]int, n)
for i := 0; i < n; i++ {
par[i] = -1
dist[i] = inf
}
S := 0
dist[S] = 0
var dfs func(int)
dfs = func(u int) {
for _, v := range g.edges[u] {
if dist[v] == inf {
dist[v] = dist[u] + 1
par[v] = u
dfs(v)
}
}
child[u]++
for _, v := range g.edges[u] {
if v != par[u] {
child[u] += child[v]
dp[u] -= prev_sum[v]
}
}
dp[u] += child[u] * child[u]
prev_sum[u] = child[u] * child[u]
}
dfs(S)
for _, v := range dp {
fmt.Printf("%d\n", v)
}
}
func nextInt() int {
wg.Scan()
i, e := strconv.Atoi(wg.Text())
if e != nil {
panic(e)
}
return i
}
sgsw