PAT1090 Highest Price in Supply Chain (25 分) 1079Total Sales of Supply Chain (25 分)

使用向量数组,将父结点相同的结点下标存在同一个向量中,也即结点i的子结点的下标都存在parentNode[i]中。本质上还是树的层次遍历。(改叫child可能更合适,child[i]表示结点i的所有子结点的下标)。

方法一:BFS

#include 
#include 
#include 
#include 
using namespace std;
#define MAXN 100005

int N;
double P, r;
vector parentNode[MAXN];//parentNode[i]存放父结点下标为i的结点的下标
int rootIndex;

struct node{
//    int parentIndex;
    int layer;
}Nodes[MAXN];

int layerOrder(int &maxLayerCount){
    int maxLayer = 1;
    
    queue q;
    Nodes[rootIndex].layer = 1;
    q.push(rootIndex);
    while (!q.empty()) {
        int top = q.front();
        q.pop();
        for (int i=0; i maxLayer) {
                maxLayer = nowLayer;
                maxLayerCount = 1;
            }
        }
    }
    
    return maxLayer;
}

int main(int argc, const char * argv[]) {
    scanf("%d %lf %lf", &N, &P, &r);
    for (int i=0; i

方法二:DFS

#include 
#include 
#include 
using namespace std;
#define MAXN 100005

int N;
double P, r;
vector child[MAXN];//child[i]存放结点下标为i的所有子结点的下标
int rootIndex;

struct node{
    int layer;
//    vector child;
}Nodes[MAXN];

int maxLayer = 0;
int maxLayerCount = 0;
void DFS(int index, int layer){
    if (child[index].size() == 0) {
        if (Nodes[index].layer == maxLayer) {
            maxLayerCount++;
            return;
        }
        if (Nodes[index].layer > maxLayer) {
            maxLayer = Nodes[index].layer;
            maxLayerCount = 1;
            return;
        }
    }
    
    for (int i=0; i

BFS得24分,DFS得25分。最近再遇到两种方法都能用的题目,多练练DFS。

 

 

1079

1.提交之前要记得把调试用的输出中间结果的代码注释掉!!测试的时候就在末尾加上//,防止后来没看到。

2.理解上不太确定的地方读题的时候就可以记下来。比如起先用layer-2答案比样例给的小一点点,因为r是百分之1,所以想到可能是(1+r)多乘一次少乘一次的问题,改成layer-1就对了。

#include 
#include 
#include 
using namespace std;
#define MAXN 100005

int N;
double P, r;

struct node{
    vector child;
    int products = 0;//有自动初始化为0
    int layer;
}Nodes[MAXN];

int retailers[MAXN];
int retailerCount = 0;

//void Init(){
//    for (int i=0; i q;
    q.push(0);
    while (!q.empty()) {
        int top = q.front();
        q.pop();
        for (int i=0; i layer - 1
        // printf("%d temp = %.2f\n", retailers[i], temp);
        sales += temp;
    }
    printf("%.1f", sales);
    
    return 0;
}


//10 1.80 1.00
//3 2 3 5
//1 9
//1 4
//1 7
//0 7
//2 6 1
//1 8
//0 9
//0 4
//0 3
//
//42.4

 

你可能感兴趣的:(PAT,PAT,1090,Highest,Price,in,Supply,Chain,1079,Total,Sales,of,Supply,Chain)