码迷,mamicode.com
首页 > 其他好文 > 详细

XDOJ_1104_dfs

时间:2016-10-29 18:46:52      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:pac   return   节点   using   str   name   nbsp   --   mat   

http://acm.xidian.edu.cn/problem.php?id=1104

 

答案为边的两边的节点数相乘,dfs一遍的节点数。

 

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cmath>
using namespace std;

int n,m,from[1005],to[1005];
vector<int> v[1005];

int dfs(int s,int t)
{
    int ans = 1;
    for(int i = 0;i < v[s].size();i++)
    {
        if(v[s][i] == t)    continue;
        ans += dfs(v[s][i],s);
    }
    return ans;
}

int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&n,&m);
        for(int i = 1;i <= n;i++)   v[i].clear();
        for(int i = 1;i < n;i++)
        {
            int a,b;
            scanf("%d%d",&a,&b);
            from[i] = a;
            to[i] = b;
            v[a].push_back(b);
            v[b].push_back(a);
        }
        for(int i = 1;i <= m;i++)
        {
            int x;
            scanf("%d",&x);
            int t = dfs(to[x],from[x]);
            printf("%d\n",t*(n-t));
        }
    }
    return 0;
}

 

XDOJ_1104_dfs

标签:pac   return   节点   using   str   name   nbsp   --   mat   

原文地址:http://www.cnblogs.com/zhurb/p/6011447.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!