hdu 5325 Crazy Bobo dfs

//    hdu 5325 Crazy Bobo
//
//    题目大意:
//
//        给你一棵树,树上每一个节点都有一个权值w,选择尽可能多的节点,
//        这些节点相互联通,而且依照权值升序排序之后得到节点编号,
//        需相邻节点之间的随意节点都要大于较小的节点。
//
//    解题思路:
//        对于每一对u,v,我们建一条这种边:权值小的像权值大的连一条边。
//        这样,问题就转化为求以u最小的权值为根的子树上点集的最大值。
//        dfs就可以。
//
//
//    感悟:
//
//        多校的一道题目,当时并没有想出来怎么做。看了看题解。然后依照
//        自己的理解敲了一边,交一发,STACK_OVERFLOW,心想怎么可能呢?
//        然后依照题解交了一发,天真的没有复制拓展栈(当时无知的我并不知道)
//        交了一发还是STACK_OVERFLOW,心里就纳闷儿了,怎么可能呢?然后云集
//        了各方的题解,发现。。。要栈拓展。由于这题数据比較大。栈的空间须要
//        非常大,所以要拓展栈。

习得了pragma这项黑客技能,只是这是c++的,g++不能够
//        我也不太懂。仅仅是会Ctrl + C 和 Ctrl + V,看来还是得多掌握掌握技能。
//        继续加油吧!

!

!FIGHTING

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream>
#include <vector>

using namespace std;

const int MAX_N =  500009;

vector<int> g[MAX_N];
int d[MAX_N];
int n;
int w[MAX_N];
bool vis[MAX_N];
void dfs(int u){
    vis[u] = 1;
    d[u] = 1;
    for (int i=0;i<g[u].size();i++){
        int v = g[u][i];
        if (!vis[v]){
            dfs(v);
        }
        d[u] += d[v];

    }
}

void print(){
    for (int i=1;i<=n;i++){
        printf("%d ",d[i]);
    }
    puts("");
}

void input(){
    for (int i=1;i<=n;i++){
        scanf("%d",&w[i]);
        g[i].clear();
    }

    for (int i = 1;i<n;i++){
        int u,v;
        scanf("%d%d",&u,&v);
        if (w[u] < w[v])    g[u].push_back(v);
        else if (w[v] < w[u])
            g[v].push_back(u);
    }
    memset(vis,0,sizeof(vis));
}

void solve(){
    for (int i=1;i<=n;i++){
        if (!vis[i]){
            dfs(i);
        }
    }
    int mx = 0;
    for (int i=1;i<=n;i++){
        mx = max(mx,d[i]);
    }
    printf("%d\n",mx);

    //print();
}

int main(){
    //freopen("1.txt","r",stdin);
    while(scanf("%d",&n)!=EOF){
        input();
        solve();
    }

}
时间: 2024-08-28 06:54:18

hdu 5325 Crazy Bobo dfs的相关文章

HDU 5325 Crazy Bobo(思路+dfs 记忆化)

Crazy Bobo Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Total Submission(s): 612    Accepted Submission(s): 189 Problem Description Bobo has a tree,whose vertices are conveniently labeled by 1,2,...,n.Each node

hdu 5325 Crazy Bobo 乱搞+搜索

Crazy Bobo Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Submission(s): 218    Accepted Submission(s): 60 Problem Description Bobo has a tree,whose vertices are conveniently labeled by 1,2,...,n.Each node h

HDU 5325 Crazy Bobo

对原来的边(u, v)  方向定为u->v当w[u] > w[v] 最大Set是max{u到达的点集合} Crazy Bobo Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Total Submission(s): 382    Accepted Submission(s): 116 Problem Description Bobo has a tree,whose ve

HDU 5325 CRAZY BOBO 排序

链接 Crazy Bobo Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Total Submission(s): 252    Accepted Submission(s): 74 Problem Description Bobo has a tree,whose vertices are conveniently labeled by 1,2,...,n.Each no

HDU 5325 Crazy Bobo(深搜)

题意:给一个n,接着输入n个数,表示n个点的值,接着输入n-1条边形成一个生成树 问最大有多少个点的集合使得该集合内的所有点都满足如下:对于集合内点大小相邻的两个点,该两点之间经过的所有点的大小都小于该两点 eg  7 3 30 350 100 200 300 400 1 2 2 3 3 4 4 5 5 6 6 7 该无向图可表示为1--2--3--4--5--6--7   取点6对于集合(3-7)来说,正好比他大的点为点3,且他们之间的所有点的 大小都小于该两点,满足条件   同理取该集合内的

DFS/BFS+思维 HDOJ 5325 Crazy Bobo

题目传送门 1 /* 2 题意:给一个树,节点上有权值,问最多能找出多少个点满足在树上是连通的并且按照权值排序后相邻的点 3 在树上的路径权值都小于这两个点 4 DFS/BFS+思维:按照权值的大小,从小的到大的连有向边,搜索最多连接点数即是答案.因为排序后,他们之间的路径, 5 可定都是从当前节点u连过去的,那么都是小于这两个节点的.DFS需手动加栈,BFS类似拓扑排序的思路 6 */ 7 #pragma comment (linker, "/STACK:1024000000,10240000

HDOJ 5325 Crazy Bobo 树形DP

按照升序或者降序选择的点集可以满足条件..... 树上的每个节点可以从子节点转移,也可以从父亲节点转移 Crazy Bobo Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Total Submission(s): 325    Accepted Submission(s): 100 Problem Description Bobo has a tree,whose vert

HDU 3157 Crazy Circuits(有源汇上下界最小流)

HDU 3157 Crazy Circuits 题目链接 题意:一个电路板,上面有N个接线柱(标号1~N),还有两个电源接线柱 + -,给出一些线路,每个线路有一个下限值求一个可以让所有部件正常工作的总电流 没有则输出impossible 思路: 有源汇有上下界求最小流,建模方法为: 按无源汇先建图,跑超级源汇ss->tt一次,然后加入t->s,容量INF的边,在跑一次ss->tt,如果是满流,就有解,解为t->s边的当前流量 顺带写个最大流的,最大流就先把t->s加入直接跑

多校 hdu 5325

Crazy Bobo Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Total Submission(s): 1308    Accepted Submission(s): 400 Problem Description Bobo has a tree,whose vertices are conveniently labeled by 1,2,...,n.Each nod