cccc L2-020. 功夫传人

来源:互联网 发布:杭州程序员招聘信息 编辑:程序博客网 时间:2024/09/21 09:03


点击打开链接


这题现场拿到了22分,最后一点超时。



现场我看一眼觉得就能暴力,   我觉得T1,T2 题只要暴力都能过。

于是直接暴力。

用结构体,加标记,for 两遍。  交上22,  超时一点,  想改,又不想浪费时间。

就跳了。

还是建个一维的图跑一边,把功力直接迭代进去。

有些徒弟出现的早,没有他师傅的功力信息,,所以用vector记录一下。

最后再来一遍。

求和即可。


#include <bits/stdc++.h>#define ll long longusing namespace std;const int maxn=1e5+10;int a[maxn],f[maxn],v[maxn],d[maxn];double p[maxn];int main(){    vector<int>vec;    int n,x,y;    double z,r,ans=0;    cin>>n>>z>>r;    p[0]=z;    for(int i=0;i<n;++i){        cin>>x;        if(x==0){            cin>>y;            a[i]=y;            v[i]=1;        }else{            while(x--){                cin>>y;                f[y]=i;                if(d[i]==0&&i) {vec.push_back(y);continue;}                d[y]=d[i]+1;                p[y]=p[i]-p[i]*r/100;            }        }    }    for(int i=0;i<vec.size();++i){        p[vec[i]]=p[f[vec[i]]]-p[f[vec[i]]]*r/100;    }    for(int i=0;i<n;++i){        if(v[i]){            ans+=p[i]*a[i];            //printf("%.0lf %d %.0lf\n",p[i],a[i],p[i]*a[i]);        }    }    printf("%.0lf",ans-0.5);    return 0;}


0 0