Submission #1303466


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 : IComparable<Pair>
{
	public int u, d;
	public Pair(int u, int d = 0)
	{
		this.u = u;
		this.d = d;
	}
	public int CompareTo(Pair x)
	{
		return d.CompareTo(x.d);
	}
}
class E { static void Main() => new J(); }
class J
{
	public 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();
		lands = hoge.Take(100).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]);
	}
	void Calc(int[] d)
	{
		Array.Sort(d);
		var i = 1;
		for (var x = 1; x < V; x++)
		{
			while (i < V && R * d[x] >= 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 = 0; i < V; i++) est[i, u] = d[i];
		return d;
	}
	int[] G() => ReadLine().Split(new char[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray();
}
class PriorityQueue
{
	List<Pair> list = new List<Pair>();
	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].CompareTo(x) <= 0) 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].CompareTo(list[a]) < 0) a = b;
			if (list[a].CompareTo(x) >= 0) 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 3235 Byte
Status AC
Exec Time 6785 ms
Memory 58712 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 35 ms 9676 KB
subtask0_sample-02.txt AC 36 ms 13780 KB
subtask1_01.txt AC 37 ms 13792 KB
subtask1_02.txt AC 37 ms 11744 KB
subtask1_03.txt AC 37 ms 11724 KB
subtask1_04.txt AC 36 ms 11744 KB
subtask1_05.txt AC 74 ms 11800 KB
subtask1_06.txt AC 77 ms 13720 KB
subtask1_07.txt AC 140 ms 12128 KB
subtask1_08.txt AC 204 ms 10316 KB
subtask1_09.txt AC 1832 ms 22576 KB
subtask1_10.txt AC 2029 ms 25676 KB
subtask1_11.txt AC 712 ms 18252 KB
subtask1_12.txt AC 6622 ms 54440 KB
subtask1_13.txt AC 6594 ms 58712 KB
subtask1_14.txt AC 6785 ms 54616 KB
subtask1_15.txt AC 4345 ms 41028 KB
subtask1_16.txt AC 6785 ms 56488 KB