zoukankan      html  css  js  c++  java
  • 挑战赛1 A Treepath

    Treepath
    时间限制:1秒 空间限制:32768K
    https://www.nowcoder.com/acm/contest/15/A

    题目描述

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

    输入描述:

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

    输出描述:

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

    输入

    3
    1 2
    1 3

    输出

    1
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 const int N=1e5+100;
     5 
     6 int n;
     7 vector<int > g[N];
     8 ll a[N][3];
     9 ll ans;
    10 
    11 void dfs(int u,int fa){
    12     for(int i=0;i<g[u].size();i++){
    13         int v=g[u][i];
    14         if(v==fa) continue ;
    15         dfs(v,u);
    16         a[u][0]+=a[v][1];
    17         a[u][1]+=a[v][0]+1;
    18     }
    19     for(int i=0;i<g[u].size();i++){
    20         int v=g[u][i];
    21         if(v==fa) continue;
    22         ll x=a[u][0]-a[v][1];
    23         ll y=a[u][1]-(a[v][0]+1);
    24         ans+=x*a[v][1]+y*(a[v][0]+1);
    25     }
    26 }
    27 
    28 int main(){
    29     scanf("%d",&n);
    30     for(int i=1;i<n;i++){
    31         int x,y;
    32         scanf("%d%d",&x,&y);
    33         g[x].push_back(y);
    34         g[y].push_back(x);
    35     }
    36     dfs(1,0);
    37     ans/=2;
    38     for(int i=1;i<=n;i++)
    39     ans+=a[i][0];
    40     cout<<ans<<endl;
    41 }
  • 相关阅读:
    day08 服务
    day11
    day09
    day10 多媒体(文字 图片 音频 视频)
    注意事项
    自己的memcache类
    memcache安装
    android的init过程分析
    Android.mk文件语法规范及使用模板
    【转】基于V4L2的视频驱动开发
  • 原文地址:https://www.cnblogs.com/hhxj/p/7666304.html
Copyright © 2011-2022 走看看