• 2015 Multi-University Training Contest 3 hdu 5325 Crazy Bobo


    Crazy Bobo

    Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)
    Total Submission(s): 1334    Accepted Submission(s): 410


    Problem Description
    Bobo has a tree,whose vertices are conveniently labeled by 1,2,...,n.Each node has a weight wi. All the weights are distrinct.
    A set with m nodes v1,v2,...,vm is a Bobo Set if:
    - The subgraph of his tree induced by this set is connected.
    - After we sort these nodes in set by their weights in ascending order,we get u1,u2,...,um,(that is,wui<wui+1 for i from 1 to m-1).For any node x in the path from ui to ui+1(excluding ui and ui+1),should satisfy wx<wui.
    Your task is to find the maximum size of Bobo Set in a given tree.
     
    Input
    The input consists of several tests. For each tests:
    The first line contains a integer n (1n500000). Then following a line contains n integers w1,w2,...,wn (1wi109,all the wi is distrinct).Each of the following n-1 lines contain 2 integers ai and bi,denoting an edge between vertices ai and bi (1ai,bin).
    The sum of n is not bigger than 800000.
     
    Output
    For each test output one line contains a integer,denoting the maximum size of Bobo Set.
     
    Sample Input
    7
    3 30 350 100 200 300 400
    1 2
    2 3
    3 4
    4 5
    5 6
    6 7
     
    Sample Output
    5
     
    Author
    ZSTU
     
    Source
     

     解题:直接搜索。。。建立有向图时候,小权向大权的连边,然后看看每个每个点,最多能走多少个点。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 #include <vector>
     5 #include <cstring>
     6 #pragma comment(linker, "/stack:1024000000,1024000000")
     7 using namespace std;
     8 const int maxn = 500010;
     9 vector<int>g[maxn];
    10 int w[maxn],ret[maxn];
    11 void dfs(int u) {
    12     ret[u] = 1;
    13     for(int i = g[u].size()-1; i >= 0; --i) {
    14         if(!ret[g[u][i]]) dfs(g[u][i]);
    15         ret[u] += ret[g[u][i]];
    16     }
    17 }
    18 int main() {
    19     int n,u,v;
    20     while(~scanf("%d",&n)){
    21         for(int i = 1; i <= n; ++i){
    22             scanf("%d",w+i);
    23             g[i].clear();
    24         }
    25         for(int i = 1; i < n; ++i){
    26             scanf("%d%d",&u,&v);
    27             if(w[u] < w[v]) g[u].push_back(v);
    28             else g[v].push_back(u);
    29         }
    30         memset(ret,0,sizeof ret);
    31         int ans = 0;
    32         for(int i = 1; i <= n; ++i){
    33             if(!ret[i]) dfs(i);
    34             ans = max(ans,ret[i]);
    35         }
    36         printf("%d
    ",ans);
    37     }
    38     return 0;
    39 }
    View Code
  • 相关阅读:
    Linux用户管理
    chattr&lsattr
    repo 回退当前分支下所有仓库到指定日期前的最新代码版本
    grep
    awk
    vscode sftp插件的使用
    程序的链接
    ZJOI2015 诸神眷顾的幻想乡
    BZOJ3756 Pty的字符串
    HDU1506 Largest Rectangle in a Histogram
  • 原文地址:https://www.cnblogs.com/crackpotisback/p/4695504.html
Copyright © 2020-2023  润新知