这题就是一道简单的贪心,但是少考虑了一种特例,当还剩下3组人,每组2个人,可以用2个4排的座位放下这些人。
1102
3302
#include <iostream>
#include <stdio.h>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <vector>
using namespace std;
#define Max_N 100000+20
int n;
vector<int> G[Max_N];
int used[Max_N];
long long int num;
double ans;
int dfs(int x, int fa, int deep, double g)
{
if (G[x].size() == 1) {
ans += g * deep;
}
for (int i = 0; i < G[x].size(); i++) {
if (G[x][i] == fa) continue;
int s = G[x].size();
if (x != 1) s--;
dfs(G[x][i], x, deep + 1, g/s) ;
//cout << x << G[x][i] << endl;
}
return 0;
}
int main()
{
cin >> n;
int x, y;
num = 0;
ans = 0;
memset(used, 0, sizeof(used));
for (int i = 1; i < n; i++) {
scanf("%d%d", &x, &y);
G[y].push_back(x);
G[x].push_back(y);
}
used[1] = 1;
//cout << "ss" << endl;
dfs(1, -1, 0, 1);
//cout << ans << num;
printf("%.15f\n", ans);
return 0;
}