• Helvetic Coding Contest 2016 online mirror F1


    Description

    Heidi has finally found the mythical Tree of Life – a legendary combinatorial structure which is said to contain a prophecy crucially needed to defeat the undead armies.

    On the surface, the Tree of Life is just a regular undirected tree well-known from computer science. This means that it is a collection of npoints (called vertices), some of which are connected using n - 1 line segments (edges) so that each pair of vertices is connected by a path (a sequence of one or more edges).

    To decipher the prophecy, Heidi needs to perform a number of steps. The first is counting the number of lifelines in the tree – these are paths of length 2, i.e., consisting of two edges. Help her!

    Input

    The first line of the input contains a single integer n – the number of vertices in the tree (1 ≤ n ≤ 10000). The vertices are labeled with the numbers from 1 to n. Then n - 1 lines follow, each describing one edge using two space-separated numbers ab – the labels of the vertices connected by the edge (1 ≤ a < b ≤ n). It is guaranteed that the input represents a tree.

    Output

    Print one integer – the number of lifelines in the tree.

    Examples
    input
    4
    1 2
    1 3
    1 4
    output
    3
    input
    5
    1 2
    2 3
    3 4
    3 5
    output
    4
    Note

    In the second sample, there are four lifelines: paths between vertices 1 and 3, 2 and 4, 2 and 5, and 4 and 5.

    我们可以dfs遍历,但只遍历两个点就return,每个点遍历一次,就是/2就好啦

    #include<bits/stdc++.h>
    using namespace std;
    vector<int>q[100000];
    int flag[100000];
    int ans;
    void dfs(int v,int sum)
    {
        if(sum==2)
        {
            ans++;
            return;
        }
        if(flag[v])
        {
            return;
        }
        flag[v]=1;
        for(int i=0;i<q[v].size();i++)
        {
            if(!flag[q[v][i]])
            {
                dfs(q[v][i],sum+1);
            }
        }
    }
    int main()
    {
        int n;
        int v,u;
        ans=0;
        cin>>n;
        for(int i=1;i<=n-1;i++)
        {
            cin>>v>>u;
            q[v].push_back(u);
            q[u].push_back(v);
        }
        for(int i=1;i<=n;i++)
        {
            memset(flag,0,sizeof(flag));
            dfs(i,0);
        }
        cout<<ans/2<<endl;
        return 0;
    }
    

      

  • 相关阅读:
    vijos 1167 南蛮图腾(打印图案)
    noj 1413 Weight 宁波 (dp)
    noj 1173 (宁波)Birdlike Angry Pig (暴力枚举)
    [1438] Get Up, Soldier! noj(宁波)
    [1441] Babelfish noj(宁波)
    长沙理工大学oj 1486: 文本整齐度 哈理工 1476(dp)
    noj 1414 (宁波) Rectangular Parallelopiped(sort+dp)
    8.6前端之内联框架
    8.5前端之Html样式和文本格式化
    8.5前端之类和id
  • 原文地址:https://www.cnblogs.com/yinghualuowu/p/5661100.html
Copyright © 2020-2023  润新知