HDU 4707 水DFS

所有房子组成一颗树,求出离根节点0的距离大于d的节点数目

DFS+vector存边 水过

#include "stdio.h"
#include "string.h"
#include "vector"
using namespace std;

vector<int>mapp[100010];
int ans,d;

void dfs(int cur,int pre,int op)
{
    int i;
    for (i=0;i<mapp[cur].size();i++)
    if (mapp[cur][i]!=pre)
    {
        if (op>=d) ans++;
        dfs(mapp[cur][i],cur,op+1);
    }
    return ;

}
int main()
{
    int t,n,a,b,i;
    scanf("%d",&t);
    while (t--)
    {
        scanf("%d%d",&n,&d);
        for (i=0;i<n;i++)
            mapp[i].clear();

        for (i=2;i<=n;i++)
        {
            scanf("%d%d",&a,&b);
            mapp[a].push_back(b);
            mapp[b].push_back(a);
        }

        ans=0;
        dfs(0,-1,0);
        printf("%d\n",ans);
    }
    return 0;
}
时间: 2024-12-17 00:07:02

HDU 4707 水DFS的相关文章

hdu 4707 Pet(dfs,bfs)

Pet Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1548    Accepted Submission(s): 733 Problem Description One day, Lin Ji wake up in the morning and found that his pethamster escaped. He sear

hdu 4707 bfs

bfs基础算法水题 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<string> #include<vector> #include<queue> using namespace std; const int Max = 1e5+50; int dist[Max]; vector<int> t

HDU 4968 (水dp 其他?)

1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #include <vector> 5 #include <map> 6 using namespace std; 7 const int inf = 0x3f3f3f3f; 8 const int MAX = 200+10; 9 double GPA[10],dp1[20][30000],dp2[20][30000

hdu 4416 水题 浙大计算机研究生复试上机考试-2005年 可是发现自己写代码有问题

Spring3与Hibernate4整合时出现了nested exception is java.lang.NoClassDefFoundError: Lorg/hibernate/cache/CacheProvider. hibernate3的时候,用spring来控制sessionfactory用的可以是org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean,因为用的是hibernate4所以照猫画

HDU 4921 Map DFS+状态压缩+乘法计数

算最多十条链,能截取某前缀段,每种方案都可以算出一个权值,每种方案的概率都是总数分之一,问最后能构成的所有可能方案数. 对计数原理不太敏感,知道是DFS先把链求出来,但是想怎么统计方案的时候想了好久,其实因为只能取某个链的前缀,所以直接取链长加+1 然后相乘即可,当然因为会出现都是空的那种情况,要去掉,全部乘完之后,要-1 然后就是算权值了,权值等于当前加进来的点的总和 以及 等级相同的点的加成,并不是特别好算,这时候考虑每个状态下的点对全局的贡献,对,就是这个思想,用状态压缩来表示状态,然后这

HDU-1037-Keep on Truckin&#39;(HDU最水的题没有之一,为了练英语就来吧)

Keep on Truckin' Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 10324    Accepted Submission(s): 7147 Problem Description Boudreaux and Thibodeaux are on the road again . . . "Boudreaux, we ha

HDU 4920 水

矩阵乘法 因为答案要MOD3,所以矩阵中会有很多值为0,对这些不乘就行了,,,,,,,这样也能水过... BUT : 这样写会超时: for (int i=1; i<=n; i++) for (int j=1; j<=n; j++) for (int k=1; k<=n; k++) c[i][j]+=a[i][k]*b[k][j]; 这样写就能过: for (int k=1; k<=n; k++) for (int i=1; i<=n; i++) for (int j=1;

HDU 4915 水

'?'可以任意改变成'(' 或者')',问序列有可行解,可行解是否唯一 首先先判断是否有解 判断是否为Many,记录每个位置的左边和右边各需要多少个'('或')' 左边所需'('若正好等于 (i+1)/2,说明若有解则只有唯一解, 右边所需')若正好等于(len-i)/2,说明若有解则只有唯一解, 若均有多解,判断是否相互包含对方 例:((()))变为 (()()): #include "stdio.h" #include "string.h" int a[1000

HDU 4911 水

对于n个数,可以做k次移动,每次移动可以互换相邻位置的两个数,问最少 number of pair (i,j) where 1≤i<j≤n and ai>aj. 如果不移动的话,ans='n个数的逆序对数',移动k次会减少k个 归并排序求逆序对数: #include "stdio.h" #include "string.h" #include "math.h" int b[100010],a[100010],mark[100010];