思路:主要是樹的遍歷,BFS或DFS都可以,這里用DFS 過程中出現“段錯誤”,找了好久,原來是動態數組開小了,10的5次方,不是指5位數,而是5個0。 關于“段錯誤”的常見原因: (1)數組開小了、數組訪問越界、vector的size是0 (2)調用sort排序函數 等等,可以用斷點調試來調,詳見斷點調試
http://blog.csdn.net/u011057161/article/details/40685487
#include<iostream> //cin cout scanf PRintf#include<vector>#include <cmath> //pow//#pragma warning(disable:4996)using namespace std;int curcount=0,curdep=0;//dfs反復遞歸調用,為免重置此值,設成全局變量vector<int> tree[100001]; //10的5次方,不是指5位數,而是5個0void DFS(int vertex,int dep){ if(tree[vertex].size()!=0){ for(int i=0;i<tree[vertex].size();i++) DFS(tree[vertex][i],dep+1);//dep+1 而非 curdep+1 }else{ if(dep>curdep){ curdep=dep; curcount=1; }else if(dep==curdep){ //雙等于為判斷 curcount++; }else{ return ; } }}int main(){ //freopen("input.txt", "r", stdin); int n,root;double p,r; scanf("%d %lf %lf",&n,&p,&r); //單精度float輸入格式是%f,雙精度double輸入格式是%lf for(int i=0;i<n;i++){ int temp;cin>>temp; if(temp!=-1){ tree[temp].push_back(i); }else{ root=i; } } DFS(root,0); printf("%.2f %d",p*pow(1+r/100,curdep),curcount); return 0;}轉自:
http://www.bubuko.com/infodetail-662077.html
新聞熱點
疑難解答