zoukankan      html  css  js  c++  java
  • Codeforces Round #321 (Div. 2)C(tree dfs)

    题意:给出一棵树,共有n个节点,其中根节点是Kefa的家,叶子是restaurant,a[i]....a[n]表示i节点是否有猫,问:Kefa要去restaurant并且不能连续经过m个有猫的节点有多少条路径;

    思路:先用vector数组建树; 再dfs..(第一次用vector建树,还看了别人的代码,果然是zz);

    代码:

     1 #include <bits/stdc++.h>
     2 #define ll long long
     3 #define MAXN 100000+10
     4 using namespace std;
     5 
     6 vector<int>tree[MAXN];
     7 int a[MAXN], vis[MAXN], n, k;
     8 ll ans;
     9 
    10 void dfs(int cnt, int num)
    11 {
    12     if(vis[cnt]||num>k) return;
    13     if(tree[cnt].size()==1&&cnt!=1) ans++;
    14     vis[cnt]++;
    15     for(int i=0; i<tree[cnt].size(); i++)
    16     {
    17         if(!vis[tree[cnt][i]])
    18         {
    19             if(!a[tree[cnt][i]]) dfs(tree[cnt][i], 0);
    20             else dfs(tree[cnt][i], num+1);
    21         }
    22     }
    23 }
    24 
    25 int main(void)
    26 {
    27     memset(vis, 0, sizeof(vis));
    28     cin >> n >> k;
    29     for(int i=1; i<=n; i++)
    30     {
    31         tree[i].clear();
    32         cin >> a[i];
    33     }
    34     for(int i=1; i<n; i++)
    35     {
    36         int x, y;
    37         cin >> x >> y;
    38         tree[x].push_back(y);
    39         tree[y].push_back(x);
    40     }
    41     ans=0;
    42     dfs(1, a[1]);
    43     cout << ans << endl;
    44     return 0;
    45 }



  • 相关阅读:
    Oracle+Ado.Net(四)
    Oracle+Ado.Net(三)
    json-server 详解
    在线字体图标
    HTML页面模板代码
    CSS样式重置
    WEB前端开发流程总结
    大前端-全栈-node+easyui+express+vue+es6+webpack+react
    大前端全栈CSS3移动端开发
    jQuery学习
  • 原文地址:https://www.cnblogs.com/geloutingyu/p/5827813.html
Copyright © 2011-2022 走看看