publicSide(int endpoint1, int endpoint2, int weight) { Endpoints = newint[2] { endpoint1, endpoint2 }; Weight = weight; } }
首先读入总边数和总点数
1 2 3
var line1 = Console.ReadLine().Split(' '); var n = Convert.ToInt32(line1[0]); var m = Convert.ToInt32(line1[1]);
读入所有“边”,储存在数组中
1 2 3 4 5 6 7 8
var sides = new Side[m]; var points = new List<int>(); var totalWeight = 0L; for (var i = 0; i < m; i++) { var line = Console.ReadLine().Split(' '); sides[i] = new Side(Convert.ToInt32(line[0]), Convert.ToInt32(line[1]), Convert.ToInt32(line[2])); }
using System; using System.Collections.Generic; using System.Linq;
publicclassSum { struct Side { publicint[] Endpoints;
publicint Weight;
publicSide(int endpoint1, int endpoint2, int weight) { Endpoints = newint[2] { endpoint1, endpoint2 }; Weight = weight; } }
publicstaticvoidMain() { var line1 = Console.ReadLine().Split(' ');
var n = Convert.ToInt32(line1[0]); var m = Convert.ToInt32(line1[1]); var sides = new Side[m]; var points = new List<int>(); var totalWeight = 0L; for (var i = 0; i < m; i++) { var line = Console.ReadLine().Split(' '); sides[i] = new Side(Convert.ToInt32(line[0]), Convert.ToInt32(line[1]), Convert.ToInt32(line[2])); }
var orderSides = sides.OrderBy(s => s.Weight).ToList();
points.AddRange(orderSides[0].Endpoints); totalWeight += orderSides[0].Weight; orderSides.RemoveAt(0); while (points.Count != n) { for (var i = 0; i < orderSides.Count; i++) { if ((!points.Contains(orderSides[i].Endpoints[0]) && !points.Contains(orderSides[i].Endpoints[1]))||(points.Contains(orderSides[i].Endpoints[0]) && points.Contains(orderSides[i].Endpoints[1]))) continue; points.Add(points.Contains(orderSides[i].Endpoints[0]) ? orderSides[i].Endpoints[1] : orderSides[i].Endpoints[0]); totalWeight += orderSides[i].Weight; orderSides.RemoveAt(i); break; } }