#include #include #define MAX 100 int N, V, T1, T2; int adj[MAX][MAX], nadj[MAX]; int cur; double prob[2][MAX]; void init() { memset(nadj, 0, sizeof(nadj)); cur = 0; memset(prob[cur], 0, sizeof(prob[cur])); prob[cur][V] = 1.0; } void read_graph() { int i; int X, Y; for (i = 0; i < N-1; i++) { scanf(" %d %d", &X, &Y); X--; Y--; adj[X][nadj[X]++] = Y; adj[Y][nadj[Y]++] = X; } } void simulate() { int i, p, j; memset(prob[!cur], 0, sizeof(prob[!cur])); for (i = 0; i < N; i++) { if (i == T1 || i == T2) { prob[!cur][i] = prob[cur][i]; } for (p = 0; p < nadj[i]; p++) { j = adj[i][p]; if (j == T1 || j == T2) { continue; } prob[!cur][i] += prob[cur][j] / nadj[j]; } } cur = !cur; } int main() { int s; while (scanf(" %d %d %d %d", &N, &V, &T1, &T2) != EOF) { V--; T1--; T2--; init(); read_graph(); for (s = 0; s < 10000; s++) { simulate(); } printf("%.6f\n", fabs(prob[cur][T1])); } return 0; }