ドワーフが巨人の肩に乗って……何?
ブログ書く直前までインフルエンザの話かと思ってたけど違うの?*1
そういやLinkedListとかあるけど使ったことないわ。
使うと便利だったりするんだろうな。多分。
using System; using System.Linq; using System.IO; using System.Text; using System.Collections; using System.Collections.Generic; /** * Auto-generated code below aims at helping you parse * the standard input according to the problem statement. **/ class Solution { //めんどいので全部確保 static Influ[] r = new Influ[10000]; static void Main(string[] args) { int n = int.Parse(Console.ReadLine()); // the number of relationships of influence for (int i = 0; i < n; i++) { string[] inputs = Console.ReadLine().Split(' '); int x = int.Parse(inputs[0]); int y = int.Parse(inputs[1]); //移す方のノードを作りリンクを追加する if(r[x] == null) r[x] = new Influ(); r[x].Next.Add(y); //移される方のノードが無ければ作る if(r[y] == null) r[y] = new Influ(); } int max = 0; foreach(Influ e in r) { if(e != null) { //再帰で調べる int tmp = sercher(e, e.N); //一番大きいノードの値を得る if(max < tmp) max = tmp; } } // Write an action using Console.WriteLine() // To debug: Console.Error.WriteLine("Debug messages..."); Console.WriteLine(max); // The number of people involved in the longest succession of influences } //再帰で調べる static int sercher(Influ e, int upn) { //既に来てたならN+1を返す if(e.isVisit == true) return e.N+1; //足跡を残す e.isVisit = true; //先を計算して値の大きい方(長距離)を選ぶ foreach(int next in e.Next) { int p = sercher(r[next], e.N); if(e.N < p) e.N = p; } //N+1を返す return e.N+1; } //インフルエンザクラス class Influ { //リンク public List<int> Next = new List<int>(); //移した数 public int N = 0; //訪問フラグ public bool isVisit = false; } }
Giant and Dwarf (Fairy Tales for Children) (English Edition)
- 作者: Alfred Crowquill
- 発売日: 2013/02/16
- メディア: Kindle版
- この商品を含むブログを見る
*1:英語が非常に弱い