Submission #8237027


Source Code Expand

#include <bits/stdc++.h>
#define GET_REP(_1, _2, _3, NAME, ...) NAME
#define rep(...) GET_REP(__VA_ARGS__, irep, _rep)(__VA_ARGS__)
#define rep1(...) GET_REP(__VA_ARGS__, irep1, _rep1)(__VA_ARGS__)
#define _rep(i, n) irep (i, 0, n)
#define _rep1(i, n) irep1(i, 1, n)
#define irep(i, a, n) for (int i = a; i < (int)(n); ++i)
#define irep1(i, a, n) for (int i = a; i <= (int)(n); ++i)
#define rrep(i, n) for (int i = (int)(n) - 1; i >= 0; --i)
#define rrep1(i, n) for (int i = (int)(n); i >= 1; --i)
#define allrep(X, x) for (auto &&X : x)
#define all(x) (x).begin(), (x).end()
#ifdef LOCAL
  #include "../../Lib/cout_container.hpp"
  #define debug(x) cerr << #x " => " << x << endl
#else
  #define debug(x) 0
#endif
using lint = long long;
constexpr int    INF  = 1 << 30;
constexpr lint   INFL = 1LL << 62;
constexpr int    MOD  = (int)1e9 + 7;
constexpr double EPS  = 1e-9;
using namespace std;
namespace { struct INIT { INIT() { cin.tie(0); ios::sync_with_stdio(false); cout << fixed << setprecision(15); } } INIT; }

using Weight = int;
struct Edge {
  int src, dst;
  Weight weight;
  Edge(void) {}
  Edge(int src, int dst) : src(src), dst(dst) {}
  Edge(int src, int dst, Weight weight) : src(src), dst(dst), weight(weight) {}
};
using Edges = vector<Edge>;
using Graph = vector<Edges>;

void edges_to_graph(Graph &graph, const Edges &edges, const int vertices, const bool directed = true) {
  graph.resize(vertices);
  for (const auto &e : edges) graph[e.src].emplace_back(e);
  if (!directed) for (const auto &e : edges) graph[e.dst].emplace_back(Edge(e.dst, e.src, e.weight));
}

int main(void) {
  int n, m;
  cin >> n >> m;
  Graph graph;
  Edges edges(m);
  rep (i, m) {
    int s, t;
    cin >> s >> t;
    edges[i] = {--s, --t};
  }
  edges_to_graph(graph, edges, n);
  vector<double> svp(n), nv(n);
  svp[0] = 1;
  rep (i, n - 1) {
    double p = svp[i] / graph[i].size();
    allrep (e, graph[i]) svp[e.dst] += p;
  }
  rrep (i, n - 1) {
    double sum = 0;
    allrep (e, graph[i]) sum += nv[e.dst];
    nv[i] = sum / graph[i].size() + 1;
  }
  double maxdec = 0;
  rep (i, n - 1) {
    const int en = graph[i].size();
    if (en == 1) continue;
    double maxi = -1;
    allrep (e, graph[i]) maxi = max(maxi, nv[e.dst]);
    double newnv = ((nv[i] - 1) * en - maxi) / (en - 1) + 1;
    maxdec = max(maxdec, (nv[i] - newnv) * svp[i]);
  }
  cout << nv[0] - maxdec << endl;
  return 0;
}

Submission Info

Submission Time
Task F - Fork in the Road
User icia
Language C++14 (GCC 5.4.1)
Score 600
Code Size 2478 Byte
Status AC
Exec Time 30 ms
Memory 5888 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 600 / 600
Status
AC × 3
AC × 65
Set Name Test Cases
Sample 00-sample-00, 00-sample-01, 00-sample-02
All 00-sample-00, 00-sample-01, 00-sample-02, 01-handmade-03, 01-handmade-04, 01-handmade-05, 01-handmade-06, 01-handmade-07, 01-handmade-08, 01-handmade-09, 02-small-10, 02-small-11, 02-small-12, 02-small-13, 02-small-14, 02-small-15, 02-small-16, 02-small-17, 02-small-18, 02-small-19, 02-small-20, 02-small-21, 02-small-22, 02-small-23, 02-small-24, 03-medium-25, 03-medium-26, 03-medium-27, 03-medium-28, 03-medium-29, 03-medium-30, 03-medium-31, 03-medium-32, 03-medium-33, 03-medium-34, 03-medium-35, 03-medium-36, 03-medium-37, 03-medium-38, 03-medium-39, 03-medium-40, 03-medium-41, 03-medium-42, 03-medium-43, 03-medium-44, 04-large-45, 04-large-46, 04-large-47, 04-large-48, 04-large-49, 04-large-50, 04-large-51, 04-large-52, 04-large-53, 04-large-54, 04-large-55, 04-large-56, 04-large-57, 04-large-58, 04-large-59, 04-large-60, 04-large-61, 04-large-62, 04-large-63, 04-large-64
Case Name Status Exec Time Memory
00-sample-00 AC 1 ms 256 KiB
00-sample-01 AC 1 ms 256 KiB
00-sample-02 AC 1 ms 256 KiB
01-handmade-03 AC 30 ms 5888 KiB
01-handmade-04 AC 30 ms 5760 KiB
01-handmade-05 AC 1 ms 256 KiB
01-handmade-06 AC 29 ms 5632 KiB
01-handmade-07 AC 1 ms 384 KiB
01-handmade-08 AC 9 ms 1792 KiB
01-handmade-09 AC 1 ms 256 KiB
02-small-10 AC 1 ms 256 KiB
02-small-11 AC 1 ms 256 KiB
02-small-12 AC 1 ms 256 KiB
02-small-13 AC 1 ms 256 KiB
02-small-14 AC 1 ms 256 KiB
02-small-15 AC 1 ms 256 KiB
02-small-16 AC 1 ms 256 KiB
02-small-17 AC 1 ms 256 KiB
02-small-18 AC 1 ms 256 KiB
02-small-19 AC 1 ms 256 KiB
02-small-20 AC 1 ms 256 KiB
02-small-21 AC 1 ms 256 KiB
02-small-22 AC 1 ms 256 KiB
02-small-23 AC 1 ms 256 KiB
02-small-24 AC 1 ms 256 KiB
03-medium-25 AC 1 ms 256 KiB
03-medium-26 AC 1 ms 256 KiB
03-medium-27 AC 1 ms 256 KiB
03-medium-28 AC 1 ms 256 KiB
03-medium-29 AC 2 ms 384 KiB
03-medium-30 AC 1 ms 256 KiB
03-medium-31 AC 1 ms 256 KiB
03-medium-32 AC 1 ms 256 KiB
03-medium-33 AC 1 ms 256 KiB
03-medium-34 AC 2 ms 384 KiB
03-medium-35 AC 1 ms 256 KiB
03-medium-36 AC 1 ms 256 KiB
03-medium-37 AC 2 ms 384 KiB
03-medium-38 AC 1 ms 256 KiB
03-medium-39 AC 1 ms 256 KiB
03-medium-40 AC 1 ms 256 KiB
03-medium-41 AC 1 ms 256 KiB
03-medium-42 AC 2 ms 384 KiB
03-medium-43 AC 2 ms 384 KiB
03-medium-44 AC 1 ms 256 KiB
04-large-45 AC 2 ms 384 KiB
04-large-46 AC 2 ms 512 KiB
04-large-47 AC 6 ms 1152 KiB
04-large-48 AC 9 ms 1664 KiB
04-large-49 AC 13 ms 2560 KiB
04-large-50 AC 2 ms 384 KiB
04-large-51 AC 2 ms 512 KiB
04-large-52 AC 6 ms 1152 KiB
04-large-53 AC 9 ms 1792 KiB
04-large-54 AC 15 ms 2816 KiB
04-large-55 AC 2 ms 384 KiB
04-large-56 AC 2 ms 512 KiB
04-large-57 AC 6 ms 1152 KiB
04-large-58 AC 9 ms 1664 KiB
04-large-59 AC 13 ms 2432 KiB
04-large-60 AC 2 ms 384 KiB
04-large-61 AC 2 ms 512 KiB
04-large-62 AC 6 ms 1152 KiB
04-large-63 AC 10 ms 1920 KiB
04-large-64 AC 16 ms 2944 KiB