Submission #2935123


Source Code Expand

#include<iostream>
#include <list>
#include<stack>
#include<queue>
#include <vector>
#include <set>
#include<algorithm>
#include<math.h>
#include<stdlib.h>
#include<string>
#include <functional>
#include<fstream>
#include<array>

#define FOR(k,m,n) for(int (k)=(m);(k)<(n);(k)++)
#define REP(i,n) FOR((i),0,(n))
#define ll long long
#define CLR(a) memset((a),0,sizeof(a))
#define SZ(x) (int((x).size()))
#define WAITING(str) int str;std::cin>>str;
#define DEBUGING(str) cout<<str<<endl
using namespace std;

const ll MOD = 1000000007;// 10^9+7
const int INF = (1 << 30);

struct Edge { int to, cost; };
enum Kind { RABBIT, TURTLE };
using Score = pair<double, Kind>;
using P = pair<int, int>;
constexpr int MAX_N = 100000;


//変数
int N, M, R, T;
array<vector<Edge>, MAX_N> edges;
vector<int> d;

void dijkstra(int s)
{
	priority_queue<P, vector<P>, greater<P>> que;
	for (auto& num : d)num = INF;
	d[s] = 0;
	que.push(P(0, s));

	while (!que.empty())
	{
		P p = que.top(); que.pop();
		int v = p.second;
		if (d[v] < p.first)continue;
		for (auto e : edges[v])
		{
			if (d[e.to] > d[v] + e.cost)
			{
				d[e.to] = d[v] + e.cost;
				que.push(P(d[e.to], e.to));
			}
		}
	}
}





//サブ関数
//入力
void input()
{
	cin >> N >> M >> R >> T;
	d.resize(N);
	REP(i, M)
	{
		int a, b, c;
		cin >> a >> b >> c;
		a--; b--;
		edges[a].push_back({ b,c });
		edges[b].push_back({ a,c });
	}
}

priority_queue<Score, vector<Score>, greater<Score>> make_scores(int goal)
{
	dijkstra(goal);
	priority_queue<Score, vector<Score>, greater<Score>> pq;

	REP(i, N)if (i != goal)
	{
		pq.push({ (double)d[i] / R, RABBIT });
		pq.push({ (double)d[i] / T, TURTLE });
	}
	return pq;
}

int count_BC_combination(int goal)
{
	int res = 0;
	int turtleWay = 0;
	auto pq = make_scores(goal);

	while (!pq.empty())
	{
		auto score = pq.top(); pq.pop();
		if (score.second == TURTLE)
		{
			turtleWay++;
		}
		else {
			res += turtleWay;
		}
	}
	return res;
}

//計算
void calc()
{
	int ans = 0;
	REP(i, N)ans += count_BC_combination(i);
	cout << ans << endl;
}


//デバッグ
void debug()
{
	int N;
	cin>>N;
}


//メイン関数
int main()
{
	input();
	calc();
	debug();
	
	return 0;
}

Submission Info

Submission Time
Task C - ウサギとカメ
User toma25
Language C++14 (GCC 5.4.1)
Score 0
Code Size 2316 Byte
Status WA
Exec Time 2279 ms
Memory 2968 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 100
Status
AC × 2
AC × 12
WA × 6
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 2 ms 2560 KB
subtask0_sample-02.txt AC 2 ms 2560 KB
subtask1_01.txt AC 3 ms 2560 KB
subtask1_02.txt AC 3 ms 2560 KB
subtask1_03.txt AC 3 ms 2560 KB
subtask1_04.txt AC 2 ms 2560 KB
subtask1_05.txt AC 12 ms 2560 KB
subtask1_06.txt WA 15 ms 2560 KB
subtask1_07.txt AC 43 ms 2688 KB
subtask1_08.txt WA 60 ms 2688 KB
subtask1_09.txt AC 591 ms 2816 KB
subtask1_10.txt AC 615 ms 2816 KB
subtask1_11.txt AC 231 ms 2688 KB
subtask1_12.txt WA 2157 ms 2960 KB
subtask1_13.txt WA 2160 ms 2960 KB
subtask1_14.txt WA 2271 ms 2960 KB
subtask1_15.txt AC 1393 ms 2816 KB
subtask1_16.txt WA 2279 ms 2968 KB