哈希存储,附C++、Java、Python3、Go代码
由于在输入奶牛父子a,b( b是 a的父亲)之前,就已经获取父亲 b的父亲信息(即父奶牛的深度),可以用哈希存储,开始 bessie的深度为 1,并不断用 b的深度去更新 a的深度,用 a的深度去更新最大深度的值,就可以得到最大的节点的深度
C++代码(运行时间:16 ms,运行空间:216 KB):
#include <iostream>
#include <cstring>
#include <algorithm>
#include <unordered_map>
using namespace std;
int n;
unordered_map<string, int> d;
string filter(string str)
{
string res;
for (auto c: str)
res += tolower(c);
return res;
}
int main()
{
d["bessie"] = 1;
cin >> n;
int res = 0;
for (int i = 0; i < n; i ++)
{
string a, b;
cin >> a >> b;
a = filter(a), b = filter(b);
d[a] = d[b] + 1;
res = max(res, d[a]);
}
cout << res;
return 0;
}
Java代码(运行时间:793 ms,运行空间:27440 KB):
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Map<String, Integer> d = new HashMap<>();
d.put("bessie", 1);
int n = sc.nextInt();
int res = 0;
for (int i = 0; i < n; i ++) {
String a = sc.next().toLowerCase();
String b = sc.next().toLowerCase();
d.put(a, d.get(b) + 1);
res = Math.max(res, d.get(a));
}
System.out.println(res);
}
}
Python3代码(运行时间:747 ms,运行空间:36548 KB):
n = int(input())
d = {}
d["bessie"] = 1
res = 0
for _ in range(n):
a, b = input().lower().split()
d[a] = d[b] + 1
res = max(res, d[a])
print(res)
Go代码(运行时间:43 ms,运行空间:4312 KB):
package main
import (
. "fmt"
"strings"
)
var (
n int
res int
d = map[string]int{"bessie": 1}
)
func main() {
for Scan(&n); n > 0; n -- {
var a, b string
Scan(&a, &b)
a = strings.ToLower(a)
b = strings.ToLower(b)
d[a] = d[b] + 1
res = max(res, d[a])
}
Println(res)
}
func max(a, b int) int {
if a > b {
return a
}
return b
}