我开始怎么也没想到示例怎么是0.25的,看了https://blog.csdn.net/miliu0408/article/details/86762919
这篇大神的文章,我才知道1/4是怎么来的。
#include<bits/stdc++.h>
using namespace std;
#define maxn 1005
struct node{
int father;//父节点
vector<int> son;//儿子节点
};
node tree[maxn];
int main(){
int N,M,L;
int f,s;
scanf("%d %d %d",&N,&M,&L);
for(int i=0;i<maxn;i++){
tree[i].son.clear();
tree[i].father = -1;
}
for(int i=0;i<M;i++){
scanf("%d %d",&f,&s);
tree[f].son.push_back(s);
tree[s].father = f;
}
vector<int> Fac;//存入宝藏节点的所有祖宗节点
Fac.clear();
while(tree[L].father!=-1){
Fac.push_back(tree[L].father);
L = tree[L].father;
}
double fm = 1.0;//分母
for(int i=0;i<Fac.size();i++){
fm = fm*tree[Fac[i]].son.size();//将所有祖宗节点的可能路径方向(即儿子节点的个数)乘起来
}
double ans = 1.0/fm;
printf("%.6f",ans);
return 0;
}