Submission #3712764
Source Code Expand
#include <bits/stdc++.h>
#define FOR(i, begin, end) for(int i=(begin);i<(end);i++)
#define REP(i, n) FOR(i,0,n)
#define IFOR(i, begin, end) for(int i=(end)-1;i>=(begin);i--)
#define IREP(i, n) IFOR(i,0,n)
#define SORT(a) sort(a.begin(), a.end())
#define REVERSE(a) reverse(a.begin(), a.end())
#define Lower_bound(v, x) distance(v.begin(), lower_bound(v.begin(), v.end(), x))
#define Upper_bound(v, x) distance(v.begin(), upper_bound(v.begin(), v.end(), x))
#define int long long
#define INF 1000000000000000000
using namespace std;
#define ANS(f) if(f) cout << "YES" << endl; else cout << "NO" << endl;
typedef vector<int> vec;
typedef vector<vec> mat;
typedef pair<int, int> Pii;
template<typename T>
void readv(vector<T> &a){ REP(i, a.size()) cin >> a[i]; }
void readi(vector<int> &a){ REP(i, a.size()){cin >> a[i]; a[i]--;} }
void debug(mat m){REP(i, m.size()){ REP(j, m[0].size()){ cout << m[i][j] << ","; } cout << endl; }}
struct edge{int to, cost;};
class Graph
{
public:
int V;
vector<vector<edge>> G;
vec d;
Graph(int V): V(V){
G = vector<vector<edge>>(V, vector<edge>(0));
d = vec(V);
}
void add_edge(int from, int to, int cost){
G[from].push_back(edge({to, cost}));
}
void add_edge2(int v1, int v2, int cost){
add_edge(v1, v2, cost);
add_edge(v2, v1, cost);
}
void dijkstra(int s, int t){
priority_queue<Pii, vector<Pii>, greater<Pii>> que;
fill(d.begin(), d.end(), INF);
d[s] = 0;
que.push(Pii(0, s));
while(!que.empty()){
Pii p = que.top(); que.pop();
int v = p.second;
if(v == t) return;
if(d[v] < p.first) continue;
REP(i, G[v].size()){
edge e = G[v][i];
if(d[e.to] > d[v] + e.cost){
d[e.to] = d[v] + e.cost;
que.push(Pii(d[e.to], e.to));
}
}
}
}
};
signed main(){
int N, M, R, T; cin >> N >> M >> R >> T;
Graph G(N);
vec a(M), b(M), c(M);
REP(i, M){
cin >> a[i] >> b[i] >> c[i];
a[i]--; b[i]--;
G.add_edge2(a[i], b[i], c[i]);
}
int ans = 0;
REP(A, N){
G.dijkstra(A, -1);
SORT(G.d);
FOR(B, 1, N){
int D = (G.d[B] * T - 1) / R;
if(D < G.d[B]) ans += Upper_bound(G.d, D) - 1;
else ans += Upper_bound(G.d, D) - 2;
}
}
cout << ans << endl;
return 0;
}
Submission Info
Submission Time |
|
Task |
C - ウサギとカメ |
User |
sumitacchan |
Language |
C++14 (GCC 5.4.1) |
Score |
100 |
Code Size |
2593 Byte |
Status |
AC |
Exec Time |
1161 ms |
Memory |
640 KB |
Judge Result
Set Name |
Sample |
All |
Score / Max Score |
0 / 0 |
100 / 100 |
Status |
|
|
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 |
1 ms |
256 KB |
subtask0_sample-02.txt |
AC |
1 ms |
256 KB |
subtask1_01.txt |
AC |
1 ms |
256 KB |
subtask1_02.txt |
AC |
1 ms |
256 KB |
subtask1_03.txt |
AC |
1 ms |
256 KB |
subtask1_04.txt |
AC |
1 ms |
256 KB |
subtask1_05.txt |
AC |
6 ms |
256 KB |
subtask1_06.txt |
AC |
9 ms |
256 KB |
subtask1_07.txt |
AC |
31 ms |
512 KB |
subtask1_08.txt |
AC |
39 ms |
512 KB |
subtask1_09.txt |
AC |
334 ms |
512 KB |
subtask1_10.txt |
AC |
320 ms |
384 KB |
subtask1_11.txt |
AC |
139 ms |
512 KB |
subtask1_12.txt |
AC |
1075 ms |
512 KB |
subtask1_13.txt |
AC |
1063 ms |
512 KB |
subtask1_14.txt |
AC |
1149 ms |
640 KB |
subtask1_15.txt |
AC |
768 ms |
512 KB |
subtask1_16.txt |
AC |
1161 ms |
640 KB |