Submission #2560616


Source Code Expand

#include<bits/stdc++.h>
using namespace std;
using ll = long long;

const int N = 150000;
vector<int> g[N];
double dp[N];
double dp1[N];
double dp2[N];
double ans[N];

// †全方位木DP†はO(N)頂点からやると落とされちゃうめう

void dfs(int i, int p = -1) {
  int sz = (g[i].size() - (p != -1));
  for(int j : g[i]) if(j != p) {
    dfs(j, i);
    dp[i] += (1 + dp1[j]);
    dp1[i] += (1 + dp1[j]) / sz;
  }
}

void dfs2(int i, int p = -1) {
  ans[i] = dp[i] + (p != -1 ? dp2[i] : 0);
  for(int j : g[i]) if(j != p) {
    dp2[j] = 1 + (ans[i] - (1 + dp1[j])) / (g[i].size() - 1); /// コーナーに気をつけよう
    dfs2(j, i); ////
  }
  ans[i] /= g[i].size();
}

int main() {
  ios::sync_with_stdio(false), cin.tie(0);
  int n;
  cin >> n;
  if(n == 2) { //
    cout << 1.0 << endl;
    cout << 1.0 << endl;
    return 0;
  }
  for(int i = 0; i < n - 1; i++) {
    int a, b; cin >> a >> b; a--; b--;
    g[a].emplace_back(b);
    g[b].emplace_back(a);
  }
  int t = 0;
  for(int i = 0; i < n; i++) if(g[t].size() >= 2) t = i; /// はい
  dfs(t);
  dfs2(t);
  cout << fixed << setprecision(7);
  for(int i = 0; i < n; i++) cout << ans[i] << endl;
}

Submission Info

Submission Time
Task D - Driving on a Tree
User luma
Language C++14 (GCC 5.4.1)
Score 0
Code Size 1231 Byte
Status WA
Exec Time 366 ms
Memory 19712 KB

Judge Result

Set Name Subtask1 Subtask2 Subtask3
Score / Max Score 0 / 190 0 / 220 0 / 390
Status
WA × 3
WA × 2
WA × 8
Set Name Test Cases
Subtask1 sub1_in1.txt, sub1_in2.txt, sub1_in3.txt
Subtask2 sub2_in1.txt, sub2_in2.txt
Subtask3 sub1_in1.txt, sub1_in2.txt, sub1_in3.txt, sub2_in1.txt, sub2_in2.txt, sub3_in1.txt, sub3_in2.txt, sub3_in3.txt
Case Name Status Exec Time Memory
sub1_in1.txt WA 3 ms 6400 KB
sub1_in2.txt WA 5 ms 6528 KB
sub1_in3.txt WA 246 ms 19456 KB
sub2_in1.txt WA 5 ms 6528 KB
sub2_in2.txt WA 5 ms 6528 KB
sub3_in1.txt WA 366 ms 13952 KB
sub3_in2.txt WA 327 ms 14452 KB
sub3_in3.txt WA 338 ms 19712 KB