Submission #1303475


Source Code Expand

using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System;
using System.Numerics;
using static System.Math;
using static System.Console;
struct Pair
{
	public int u, d;
	public Pair(int u, int d = 0)
	{
		this.u = u;
		this.d = d;
	}
}
class E { static void Main() => new J(); }
class J
{
	const int INF = 1000000007;
	int V, R, T;
	List<Pair>[] es;
	long s;
	public J()
	{
		var I = G();
		V = I[0];
		int E = I[1]; R = I[2]; T = I[3];
		es = new List<Pair>[V];
		for (var i = 0; i < V; i++) es[i] = new List<Pair>();
		for (var e = 0; e < E; e++)
		{
			I = G();
			int a = I[0] - 1, b = I[1] - 1, c = I[2];
			es[a].Add(new Pair(b, c));
			es[b].Add(new Pair(a, c));
		}
		est = new int[V, V];
		for (var u = 0; u < V; u++) for (var v = 0; v < V; v++) est[u, v] = INF;
		var hoge = new List<Pair>(V);
		for (var i = 0; i < V; i++) hoge.Add(new Pair(i, -es[i].Count));
		hoge.Sort((x, y) => x.d.CompareTo(y.d));
		lands = hoge.Take(4).Select(z => z.u).ToArray();
		island = new HashSet<int>(lands);
		foreach (var x in lands)
		{
			var d = DijkstraFrom(x);
			Estimate(d);
			Calc(d);
		}
		for (var u = 0; u < V; u++) if (!island.Contains(u)) Calc(DijkstraFrom(u));
		WriteLine(s);
		//for (var u = 0; u < V; u++) for (var v = 0; v < V; v++) Console.WriteLine("d[{0}, {1}] = {2}", u, v, est[u, v]);
	}
	void Estimate(int[] d)
	{
		for (var u = 0; u < V; u++) for (var v = 0; v < V; v++) est[u, v] = Min(est[u, v], d[u] + d[v]);
		//for (var u = 0; u < V; u++) for (var v = 0; v < V; v++) Console.WriteLine("d[{0}, {1}] = {2}", u, v, est[u, v]);
	}
	void Calc(int[] d)
	{
		Array.Sort(d);
		var i = 1;
		for (var x = 1; x < V; x++)
		{
			var t = R * d[x] / T;
			while (i < V && t >= d[i]) i++;
			s += V - i;
			if (i <= x) s--;
		}
	}
	PriorityQueue q = new PriorityQueue();
	int[] lands;
	HashSet<int> island;
	int[,] est;
	int[] DijkstraFrom(int u)
	{
		var d = new int[V];
		for (var i = 0; i < V; i++) d[i] = INF;
		q.Enqueue(new Pair(u, d[u] = 0));
		while (q.Count > 0)
		{
			var p = q.Dequeue();
			var v = p.u;
			if (d[v] < p.d) continue;
			foreach (var e in es[v])
			{
				var tmp = d[v] + e.d;
				if (d[e.u] > tmp && est[u, e.u] >= tmp) q.Enqueue(new Pair(e.u, d[e.u] = tmp));
			}
		}
		for (var i = u + 1; i < V; i++) est[i, u] = d[i];
		return d;
	}
	int[] G() => ReadLine().Split().Select(int.Parse).ToArray();
}
class PriorityQueue
{
	List<Pair> list = new List<Pair>(10000);
	public int Count;
	public void Enqueue(Pair x)
	{
		var pos = Count++;
		list.Add(x);
		while (pos > 0)
		{
			var p = (pos - 1) / 2;
			if (list[p].d <= x.d) break;
			list[pos] = list[p];
			pos = p;
		}
		list[pos] = x;
	}
	public Pair Dequeue()
	{
		var value = list[0];
		var x = list[--Count];
		list.RemoveAt(Count);
		if (Count == 0) return value;
		var pos = 0;
		while (pos * 2 + 1 < Count)
		{
			var a = 2 * pos + 1;
			var b = 2 * pos + 2;
			if (b < Count && list[b].d < list[a].d) a = b;
			if (list[a].d >= x.d) break;
			list[pos] = list[a];
			pos = a;
		}
		list[pos] = x;
		return value;
	}
}

Submission Info

Submission Time
Task C - ウサギとカメ
User selpo
Language C# (Mono 4.6.2.0)
Score 100
Code Size 3219 Byte
Status AC
Exec Time 2997 ms
Memory 58584 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 100 / 100
Status
AC × 2
AC × 18
Set Name Test Cases
Sample subtask0_sample-01.txt, subtask0_sample-02.txt
All subtask0_sample-01.txt, subtask0_sample-02.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_15.txt, subtask1_16.txt
Case Name Status Exec Time Memory
subtask0_sample-01.txt AC 34 ms 11744 KB
subtask0_sample-02.txt AC 34 ms 11772 KB
subtask1_01.txt AC 35 ms 11772 KB
subtask1_02.txt AC 35 ms 11744 KB
subtask1_03.txt AC 34 ms 9696 KB
subtask1_04.txt AC 35 ms 13692 KB
subtask1_05.txt AC 49 ms 13920 KB
subtask1_06.txt AC 51 ms 9824 KB
subtask1_07.txt AC 88 ms 12128 KB
subtask1_08.txt AC 112 ms 12384 KB
subtask1_09.txt AC 842 ms 24672 KB
subtask1_10.txt AC 875 ms 23648 KB
subtask1_11.txt AC 342 ms 16352 KB
subtask1_12.txt AC 2857 ms 56536 KB
subtask1_13.txt AC 2824 ms 58584 KB
subtask1_14.txt AC 2997 ms 54488 KB
subtask1_15.txt AC 1959 ms 45272 KB
subtask1_16.txt AC 2994 ms 56536 KB