Problem:
橋の取り壊し

水の国ウォーターデブンには n 個の都市があります。各都市は水に囲まれており、島国のようになっています。ウォーターデブンには m 本の橋があり、都市間の交通はそれらの橋によって行われ、全ての都市に行き来することができます。

最近、道路特定財源の見直しにより橋の維持費の削減が決定されました。全部の橋を維持することができなくなってしまい、いくつかの橋を取り壊すことになりました。そこで、ウォーターデブンはどの都市にでも行くことができるように橋を残しつつ、橋の維持費を最小化することが課題となりました。

都市の数、橋の数、各橋の維持費を入力とし、橋を利用してどの都市にも行けるようにしつつ、橋を取り壊した場合の維持費の最小値を出力するプログラムを作成してください。なお、橋の取り壊しには費用が掛からないものとします。ただし、各都市は 0 から n - 1 まで順番に番号が付けられているものとします。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロふたつの行で示されます。各データセットは以下の形式で与えられます。

n m
a1 b1 cost1
a2 b2 cost2
:
am bm costm

１行目に都市の数 n (2 ≤ n ≤ 100)、 橋の数 m (1 ≤ m ≤ 500) が与えられます。続く m 行に第 i の橋の情報が与えられます。ai, bi は橋がつないでいる都市の番号、costi (1 ≤ costi ≤ 1000) は橋にかかる維持費を表します。

Output

データセット毎に橋の維持費の合計を１行に出力します。

Sample Input

5 6
0 2 1
2 1 3
2 3 8
1 3 2
3 4 5
1 4 4
3 3
1 2 3
2 0 3
0 1 3
0 0

Output for the Sample Input

10
6

Solution in C# (judge verdict: Wrong Answer)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;



namespace Test1 {



    class hasi {
        public int c1=-1, c2=-1;
        public bool used = false;
        public int cost = -1;
        public hasi(int c1, int c2, int cost){this.cost = cost; this.c1=c1;this.c2=c2;}
        public int transPortFrom(int start) {
            if (start == c1) { return c2; }
            if (start == c2) { return c1; }
            else { return -1; }
        }

    }

    class city {
        public bool check = false;
        public int cost = int.MaxValue;
        public int id;
        public hasi fromHasi = null;
    }


    class ClassMain {

       

        public static void Main(String[] args) {
            string line;
            while ((line = Console.ReadLine()) != null) {
                int[] nm = line.Split(' ').Select(int.Parse).ToArray();
                if (nm[0] == 0) { break; }
                city[] cities = new city[nm[0]];
                for (int i = 0; cities.Length > i; i++) { 
                    cities[i]= new city();
                    cities[i].id = i; 
                }
                hasi[] hasis = new hasi[nm[1]];

                for (int i = 0; i < nm[1]; i++) {
                    int[] inputs =
                        Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
                    hasis[i]=new hasi(inputs[0],inputs[1],inputs[2]);

                }

                doDijkstra(cities, hasis);

                int sumcost = 0;
                for (int i = 0; i < hasis.Length; i++) {
                    if (hasis[i].used) { sumcost += hasis[i].cost; }
                }
                Console.WriteLine(sumcost);
            }
        }


        public static void doDijkstra(city[] cities, hasi[] hasis) {
            cities[0].cost = 0;
            while (true) {
                //Check.
                city checkNow = null;
                int min = int.MaxValue;
                for (int i = 0; i < cities.Length; i++) {
                    city acity = cities[i];
                    if (acity.check == true) { continue; }
                    if (acity.cost < min) {
                        min = acity.cost;
                        checkNow = acity;
                    }
                }
                if (checkNow == null) { break; }
                //Console.WriteLine("checked"+checkNow.id);
                checkNow.check = true;
                if (checkNow.fromHasi != null) { checkNow.fromHasi.used = true; }
                //end check.

                //Edges and reload costs.
                for (int i = 0; i < hasis.Length; i++) {
                    hasi ahasi = hasis[i];
                    int transTo = ahasi.transPortFrom(checkNow.id);
                    if (transTo < 0) { continue; }
                    else {
                        city toCity = cities[transTo];
                        int newCost = checkNow.cost + ahasi.cost;
                        if (newCost < toCity.cost) {
                            toCity.cost = newCost;
                            toCity.fromHasi = ahasi;
                        }
                    }

                }
            }//endWile
        }//end dijkstra
    }



    
}