ZJU-PAT 1079. Total Sales of Supply Chain (25) 浙大2014年上机复试第三题

来源:互联网 发布:域名不解析可以不备案 编辑:程序博客网 时间:2024/06/15 02:28
#include<iostream>#include<cstdio>using namespace std;struct Node{    int parent;  //父节点    bool flag;  //是否是retailers    int level;   //第几层    int num;    //销售多少个};Node tt[100005];int n;double p,r,sum;int Jisuan(int num){    if(tt[num].level!=-1)        return tt[num].level;    else        return Jisuan(tt[num].parent)+1;}double Count[100005];void run(){    scanf("%d",&n);    scanf("%lf%lf",&p,&r);    Count[0]=p;    for(int i=1; i<100005; i++)    {        Count[i]=Count[i-1]*(1.0+r/100.0);    }    for(int i=1; i<n; i++)    {        tt[i].level=-1;    }    tt[0].level=0;    for(int i=0; i<n; i++)    {        int tmp;        scanf("%d",&tmp);        if(tmp==0)        {            scanf("%d",&tmp);            tt[i].flag=true;            tt[i].num=tmp;        }        else        {            tt[i].flag=false;            for(int j=0; j<tmp; j++)            {                int t;                scanf("%d",&t);                tt[t].parent=i;            }        }    }    for(int i=1; i<n; i++)    {        tt[i].level=Jisuan(i);    }    sum=0.0;    for(int i=0; i<n; i++)    {        if(tt[i].flag==true) sum+=tt[i].num*Count[tt[i].level];    }    printf("%.1lf\n",sum);}int main(){    run();    return 0;}



#include<iostream>#include<cstdio>#include<queue>using namespace std;const int N=100005;struct Node{    int parent;  //父节点    vector<int> child; //孩子    int level;   //第几层    int num;    //销售多少个};Node tt[N];int n;double p,r,sum;double Count[N];void BFS(){    queue<Node> Q;    Q.push(tt[0]);    tt[0].level=0;    while(!Q.empty())    {        Node tmp=Q.front();        Q.pop();        for(int i=0;i<tmp.child.size();i++)        {            tt[tmp.child[i]].level=tmp.level+1;            Q.push(tt[tmp.child[i]]);        }    }}void Init(){    scanf("%d",&n);    scanf("%lf%lf",&p,&r);    Count[0]=p;    for(int i=1; i<N; i++)    {        Count[i]=Count[i-1]*(1.0+r/100.0);    }    for(int i=0; i<n; i++)    {        int tmp;        scanf("%d",&tmp);        if(tmp==0)        {            scanf("%d",&tmp);            tt[i].num=tmp;        }        else        {            tt[i].num=0;            for(int j=0; j<tmp; j++)            {                int t;                scanf("%d",&t);                tt[t].parent=i;                tt[i].child.push_back(t);            }        }    }}void Jisuan(){    sum=0.0;    for(int i=0; i<n; i++)    {        if(tt[i].num) sum+=tt[i].num*Count[tt[i].level];    }    printf("%.1lf\n",sum);}int main(){    Init();    BFS();    Jisuan();    return 0;}


0 0
原创粉丝点击