private static void IncrementByRepresentative(Dictionary<int, int> counter1, DisjointTracker<int> tracker1, int p) { int rep = tracker1.GetRepresentative(p); if (counter1.ContainsKey(rep)) { counter1[rep] = counter1[rep] + 1; } else { counter1[rep] = 1; } }
private static void IncrementByRepresentative(Dictionary <int, int> counter1, DisjointTracker <int> tracker1, int p) { int rep = tracker1.GetRepresentative(p); if (counter1.ContainsKey(rep)) { counter1[rep] = counter1[rep] + 1; } else { counter1[rep] = 1; } }
private static string Solve(int r, int[] x1, int[] x2, int[] y1, int[] y2) { DisjointTracker <int> sets = new DisjointTracker <int>(); for (int i = 0; i < r; i++) { sets.Add(i); } for (int i = 0; i < r; i++) { for (int j = i + 1; j < r; j++) { if (x1[i] > x2[j] + 1 || x2[i] < x1[j] - 1 || y1[i] > y2[j] + 1 || y2[i] < y1[j] - 1) { continue; } if (x1[i] == x2[j] + 1 && y1[i] == y2[j] + 1) { continue; } if (x1[j] == x2[i] + 1 && y1[j] == y2[i] + 1) { continue; } sets.Union(i, j); } } Dictionary <int, List <int> > setLookup = new Dictionary <int, List <int> >(); for (int i = 0; i < r; i++) { int rep = sets.GetRepresentative(i); List <int> vals; if (setLookup.TryGetValue(rep, out vals)) { vals.Add(i); } else { vals = new List <int>(); vals.Add(i); setLookup[rep] = vals; } } int max = 0; foreach (List <int> set in setLookup.Values) { int maxx2 = int.MinValue; int maxy2 = int.MinValue; for (int i = 0; i < set.Count; i++) { if (x2[set[i]] > maxx2) { maxx2 = x2[set[i]]; } if (y2[set[i]] > maxy2) { maxy2 = y2[set[i]]; } } int selectedx1 = x1[set[0]]; int selectedy1 = y1[set[0]]; for (int i = 1; i < set.Count; i++) { if (y1[set[i]] - selectedy1 < -1 * (x1[set[i]] - selectedx1)) { selectedy1 = y1[set[i]]; selectedx1 = x1[set[i]]; } } int thisTotal = maxx2 - selectedx1 + maxy2 - selectedy1 + 1; if (thisTotal > max) { max = thisTotal; } } return(max.ToString()); }