static void Main(string[] args) { #region Read input int n = int.Parse(Console.ReadLine()); for (int i = 0; i < n - 1; i++) { string[] tokens = Console.ReadLine().Split(new char[] { '<', '-', ' ', ')', '(' }, StringSplitOptions.RemoveEmptyEntries); int parent = int.Parse(tokens[0]); int child = int.Parse(tokens[1]); if (nodes.ContainsKey(parent) && nodes.ContainsKey(child)) { nodes[parent].AddChild(nodes[child]); nodes[child].AddChild(nodes[parent]); } else if (nodes.ContainsKey(parent)) { Node childNode = new Node(child); nodes.Add(childNode.Value, childNode); nodes[parent].AddChild(nodes[child]); nodes[child].AddChild(nodes[parent]); } else if (nodes.ContainsKey(child)) { Node parentNode = new Node(parent); nodes.Add(parentNode.Value, parentNode); nodes[parent].AddChild(nodes[child]); nodes[child].AddChild(nodes[parent]); } else { Node childNode = new Node(child); Node parentNode = new Node(parent); nodes.Add(childNode.Value, childNode); nodes.Add(parentNode.Value, parentNode); nodes[parent].AddChild(nodes[child]); nodes[child].AddChild(nodes[parent]); } } #endregion foreach (var node in nodes) { if (node.Value.ChildrenNumber == 1) { FindMaxPath(node, 0); visited.Clear(); } } Console.WriteLine(maxPath); }
public void AddChild(Node child) { children.Add(child); }