public static long MinWaitTime(string[] queries) { long n = queries.Length; long sum = 0; var arrvList = new MinHeap <Cust>(); // ordered in arrTime var waitList = new MinHeap <Cust1>(); // ordered on cookTime foreach (var q in queries) { string[] s = q.Split(' '); arrvList.Add(new Cust { arrTime = long.Parse(s[0]), cookTime = long.Parse(s[1]) }); } var c0 = arrvList.PopMin(); waitList.Add(new Cust1(c0)); long time = c0.arrTime; while (waitList.GetSize() > 0) { var curr = waitList.PopMin(); time = time + curr.cookTime; while (arrvList.GetSize() > 0 && arrvList.GetMin().arrTime <= time) { waitList.Add(new Cust1(arrvList.PopMin())); } sum += (time - curr.arrTime); if (waitList.GetSize() < 1 && arrvList.GetSize() > 0) { waitList.Add(new Cust1(arrvList.PopMin())); } } return(sum / n); }
public static long getMSTWeight(int n, string[] queries) { long res = 0; TreeHelper tree = new TreeHelper(n); foreach (var q in queries) { minHeap.Add(new Triplet(q)); } int count = 1; while (minHeap.GetSize() > 0 && count < n) { Triplet t = minHeap.PopMin(); int leaf = 0; bool ok = tree.merge(t[0], t[1], out leaf); if (ok) { res += t[2]; count++; } } return(res); }