• 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.


    没有上司的舞会

     

     时间限制: 1 s
     空间限制: 128000 KB
     题目等级 : 钻石 Diamond
     
     
     
    题目描述 Description

          Ural大学有N个职员,编号为1~N。他们有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。每个职员有一个快乐指数。现在有个周年庆宴会,要求与会职员的快乐指数最大。但是,没有职员愿和直接上司一起与会。

    输入描述 Input Description

    第一行一个整数N。(1<=N<=6000)
    接下来N行,第i+1行表示i号职员的快乐指数Ri。(-128<=Ri<=127)
    接下来N-1行,每行输入一对整数L,K。表示K是L的直接上司。
    最后一行输入0,0。

    输出描述 Output Description

    输出最大的快乐指数。

    样例输入 Sample Input

    7
    1
    1
    1
    1
    1
    1
    1
    1 3
    2 3
    6 4
    7 4
    4 5
    3 5
    0 0

    样例输出 Sample Output

    5

    数据范围及提示 Data Size & Hint

    各个测试点1s

    ——————————————————我是华丽丽的分割线——————————————————————

    水题,很坑。

    标程用的是数组模拟邻接表,但STL大法好((^o^)/~),vector秒杀。。。

    存储后从上往下递归,依次计算。

    还有一个坑点,在洛谷上数据范围不能信。开6000的数组有4个点会RE,必须开10000的数组才能AC。

    代码如下:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cmath>
     5 #include<algorithm>
     6 #include<queue>
     7 #include<cstdlib>
     8 #include<iomanip>
     9 #include<cassert>
    10 #include<climits>
    11 #include<vector>
    12 #define maxn 10001
    13 using namespace std;
    14 int read(){
    15     int x=0,f=1;char ch=getchar();
    16     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    17     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    18     return x*f;
    19 }
    20 int n,x,y,k;
    21 int cnt,c[maxn],head[maxn];
    22 bool b[maxn];
    23 int f[maxn][2];
    24 vector <int> edge[maxn];
    25 void dfs(int i)
    26 {
    27     int a,b;
    28     for(int j=0;j<edge[i].size();j++)
    29     {
    30         dfs(edge[i][j]);
    31         f[i][0]+=max(f[edge[i][j]][0],f[edge[i][j]][1]);
    32         f[i][1]+=f[edge[i][j]][0]; 
    33     }
    34     f[i][1]+=c[i];
    35 }
    36 int main()
    37 {
    38     std::ios::sync_with_stdio(false);//cout<<setiosflags(ios::fixed)<<setprecision(1)<<y;
    39 //  freopen("data.in","r",stdin);
    40 //  freopen("data.out","w",stdout);
    41     int n,m; 
    42     cin>>n;
    43     for(int i=1;i<=n;i++) cin>>c[i];
    44     int x,y;
    45     for(int i=1;i<=n;i++)
    46     {
    47         cin>>x>>y;
    48         if(x==0&&y==0) break;
    49         else
    50         {
    51             edge[y].push_back(x);
    52             b[x]=true;
    53         }
    54     }
    55     for(int i=1;i<=n;i++)
    56     {
    57         if(b[i]==false)
    58         {
    59             dfs(i);
    60             cout<<max(f[i][1],f[i][0])<<endl;
    61             break;
    62         }
    63     } 
    64     return 0;
    65 }
    没有上司的舞(污)会(秽)
  • 相关阅读:
    Codeforces Round #741 (Div. 2)部分题题解
    Wedding DJ题解 (回归OI)
    Note -「模板」FHQ-Treap
    Solution -「数论」「校内题」矩阵求和
    【游记】WC2021抱铃记
    洛谷 P7073 /AcWing 2769. 表达式
    洛谷 P3004 [USACO10DEC]Treasure Chest S/CSES 1097
    P7074 [CSP-J2020] 方格取数
    Unity Built-in转URP速查表
    英国学生签证准备材料+办理流程等
  • 原文地址:https://www.cnblogs.com/AwesomeOrion/p/5514071.html
Copyright © 2020-2023  润新知