PAT

mac2025-08-23  1

题意:和1090的最高的供应链差不多,

思路:此题就是求最短的路径及其条数,注意点比较时候最小的层次不能小于100000,因为题目给出了N<=10的5次方,有可能有最多的节点数且只有一条路径此情况

代码:

#include<iostream> #include<math.h> #include<vector> using namespace std; vector<int> p[100005]; int minlevel = 999999,cnt = 1;//minlevel过小有两个点始终通不过 void dfs(int num,int level) { if (level > minlevel)return; if (p[num].size() == 0) { if (level < minlevel) { minlevel = level; cnt = 1; } else if (level == minlevel) {//若有多个最小层的 cnt++; } } for (int i = 0;i < p[num].size(); i++) { dfs(p[num][i],level+1); } } int main() { int n = 0, id = 0; double price = 0, rate = 0; cin >> n >> price >> rate; for (int i = 0, tem = 0; i < n; i++) {//构建树 scanf("%d", &tem); for (int j = 0; j < tem; j++) { scanf("%d", &id); p[i].push_back(id); } } dfs(0, 0); printf("%.4f %d\n", price*pow((1 + rate / 100), minlevel), cnt); system("pause"); return 0; }

 

最新回复(0)