zoukankan      html  css  js  c++  java
  • 洛谷 p1352 没有上司的舞会 题解

     P1352 没有上司的舞会

    题目描述

    某大学有N个职员,编号为1~N。他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri,但是呢,如果某个职员的上司来参加舞会了,那么这个职员就无论如何也不肯来参加舞会了。所以,请你编程计算,邀请哪些职员可以使快乐指数最大,求最大的快乐指数。

    输入输出格式

    输入格式:

    第一行一个整数N。(1<=N<=6000)

    接下来N行,第i+1行表示i号职员的快乐指数Ri。(-128<=Ri<=127)

    接下来N-1行,每行输入一对整数L,K。表示K是L的直接上司。

    最后一行输入0 0

    输出格式:

    输出最大的快乐指数。

    输入输出样例

    输入样例#1:
    7
    1
    1
    1
    1
    1
    1
    1
    1 3
    2 3
    6 4
    7 4
    4 5
    3 5
    0 0
    
    输出样例#1:
    5
    ——————————————————————————————————我是华丽丽的分割线————————————————————————————————

    树形动规果题。
     1 /*
     2     Problem:P1352 没有上司的舞会
     3     OJ:        洛谷 
     4     User:    S.B.S.
     5     Time:    27 ms
     6     Memory: 16992 kb 
     7     Length: N/A
     8 */
     9 #include<iostream>
    10 #include<cstdio>
    11 #include<cstring>
    12 #include<cmath>
    13 #include<algorithm>
    14 #include<queue>
    15 #include<cstdlib>
    16 #include<iomanip>
    17 #include<cassert>
    18 #include<climits>
    19 #include<functional>
    20 #include<bitset>
    21 #include<vector>
    22 #include<list>
    23 #include<map>
    24 #define F(i,j,k) for(int i=j;i<=k;i++)
    25 #define M(a,b) memset(a,b,sizeof(a))
    26 #define FF(i,j,k) for(int i=j;i>=k;i--)
    27 #define maxn 10001
    28 #define inf 0x3f3f3f3f
    29 #define maxm 1001
    30 #define mod 998244353
    31 //#define LOCAL
    32 using namespace std;
    33 int read(){
    34     int x=0,f=1;char ch=getchar();
    35     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    36     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    37     return x*f;
    38 }
    39 int n,m;
    40 int x,y,k;
    41 int cnt,c[maxn],head[maxn];
    42 bool b[maxn];
    43 int f[maxn][2];
    44 vector <int> edge[maxn];
    45 void dfs(int u)
    46 {
    47     int a,b;
    48     for(int i=0;i<edge[u].size();i++)
    49     {
    50         dfs(edge[u][i]);
    51         f[u][0]+=max(f[edge[u][i]][0],f[edge[u][i]][1]);
    52         f[u][1]+=f[edge[u][i]][0]; 
    53     }
    54     f[u][1]+=c[u];
    55 }
    56 int main()
    57 {
    58     std::ios::sync_with_stdio(false);//cout<<setiosflags(ios::fixed)<<setprecision(1)<<y;
    59     #ifdef LOCAL
    60     freopen("data.in","r",stdin);
    61     freopen("data.out","w",stdout);
    62     #endif
    63     int n,m; 
    64     cin>>n;
    65     for(int i=1;i<=n;i++) cin>>c[i];
    66     int x,y;
    67     for(int i=1;i<=n;i++)
    68     {
    69         cin>>x>>y;
    70         if(x==0&&y==0) break;
    71         else
    72         {
    73             edge[y].push_back(x);
    74             b[x]=true;
    75         }
    76     }
    77     for(int i=1;i<=n;i++)
    78     {
    79         if(b[i]==false)
    80         {
    81             dfs(i);
    82             cout<<max(f[i][1],f[i][0])<<endl;
    83             break;
    84         }
    85     } 
    86     return 0;
    87 }
    p1352
  • 相关阅读:
    在腾讯云上使用URLOS一键安装Discuz! Q
    共享容器——URLOS最新发布的一项超强功能
    在群晖NAS上运行URLOS之后竟然能安装Discuz! Q!!
    Discuz!Q回归,如何一键安装Discuz!Q
    Docker管理面板-URLOS(易用、高效、强大)
    CentOS下Subversion(SVN)的快速安装与配置
    通过URLOS安装Redis缓存为wordpress网站提速
    5分钟快速安装Redmine项目管理软件
    Python3+HTMLTestRunner+SMTP生成测试报告后发送邮件
    Python3+HTMLTestRunner生成html测试报告时报错HTMLTestRunner.py line 687, in generateReport  self.stream.write(output.encode('utf8'))
  • 原文地址:https://www.cnblogs.com/SBSOI/p/5924177.html
Copyright © 2011-2022 走看看