dfs从根开始比从叶子结点开始快得多,
为了不超时->倒过来存
#include <iostream>
#include <vector>
#include <math.h>
using namespace std;
vector<int> T[100010];//T[supplier_index]=index
int highest_num=0,highest_depth=-1;
void dfs(int root,int depth){//还是从上往下
if(T[root].size()==0){
if(depth>highest_depth){
highest_depth=depth;
highest_num=1;
}else if(depth==highest_depth){
highest_num++;
}
}
for(int i=0;i<T[root].size();i++){
dfs(T[root][i],depth+1);
}
}
int main(){
int n,t,root;
double p,r;
scanf("%d %lf %lf",&n,&p,&r);
for(int i=0;i<n;i++){
scanf("%d",&t);
if(t==-1) root=i;
else T[t].push_back(i);//从下往上dfs,太多重复,容易超时,倒过来存不就行了~
}
dfs(root,0);
printf("%.2f %d",p*pow(1+0.01*r,highest_depth),highest_num);
return 0;
}
本文介绍了一种使用DFS算法解决特定问题的方法,并通过调整遍历方向来优化算法性能,避免超时。文章详细解释了如何从根节点开始进行深度优先搜索,并通过实例展示了如何通过倒序存储节点以提高效率。
323

被折叠的 条评论
为什么被折叠?



