zoukankan      html  css  js  c++  java
  • Treepath

    Treepath

    题目描述

    给定一棵n个点的树,问其中有多少条长度为偶数的路径。路径的长度为经过的边的条数。x到y与y到x被视为同一条路径。路径的起点与终点不能相同。

    输入描述:

    第一行一个数n表示点的个数;
    接下来n-1行,每行两个整数x,y表示边;
    保证输入数据形成一棵树;
    1<=n<=100000

    输出描述:

    一行一个整数表示答案。
    示例1

    输入

    3
    1 2
    1 3

    输出

    1

    dfs,假设1为最顶层,遍历每一个节点,求出奇数层和偶数层的数量。


     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 #define ll long long
     4 const int N = 100010;
     5 vector<int> vs[N];
     6 bool vis[N];
     7 ll ans1, ans2;
     8 void dfs(int x, int de) {
     9     vis[x] = true;
    10     for(int i = 0; i < vs[x].size(); i ++) {
    11         int v = vs[x][i];
    12         if(!vis[v]) {
    13             if((de+1) %2) ans1 ++;
    14             else ans2 ++; 
    15             dfs(v, de+1);
    16         }
    17     }
    18 }
    19 void init(){
    20     ans1 = ans2 = 0;
    21     memset(vis, false, sizeof(vis));
    22     for(int i = 1; i < N; i ++) vs[i].clear();
    23 }
    24 int main() {
    25     int n, x, y;
    26     while(scanf("%d", &n)!=EOF) {
    27         init();
    28         for(int i = 1; i < n; i ++) {
    29             scanf("%d %d", &x, &y);
    30             vs[x].push_back(y);
    31             vs[y].push_back(x);
    32         }
    33         dfs(1, 1);
    34         ans1++;
    35         // printf("%d %d
    ", ans1, ans2);
    36         ll cnt = (ans1-1)*ans1 + (ans2-1)*ans2;
    37         printf("%lld
    ",cnt/2);        
    38     }    
    39     return 0;
    40 }
  • 相关阅读:
    2017微软秋招A题
    UVA 494 Kindergarten Counting Game
    loss function与cost function
    coderforces 721b
    coderforces719b
    PyQt4打包exe文件
    PyQt4 UI设计和调用 使用eric6
    PyQt4 进度条和日历 代码
    PyQt4 颜色选择,字体选择代码
    PyQt4调用UI文件
  • 原文地址:https://www.cnblogs.com/xingkongyihao/p/7668608.html
Copyright © 2011-2022 走看看