题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5927

题意:

给你一棵树,其中有一些’不重要‘的点,要是这些’不重要‘的点的子树中有两个重要的点的LCA是这个点,那么这个点就是重要的点。每次询问 问你重要的点有多少?

思路:

用不重要的点建图,要是这个不重要点上的相邻子树至少有两个有重要的点不在同一子树上,那么这个不重要的点才变成重要的点。

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <map>
using namespace std;
const int N = 1e5 + ;
vector <int> G[N];
int d[N], a[N], par[N], d2[N], cnt, son[N];
bool vis[N];
//son[u]表示u节点相邻的子树个数
//原图:d[u]表示以u节点为root的子树节点个数
//不重要点建的图:d2[u]表示以u节点为root的子树节点个数
//cnt表示不重要的点的个数 void init(int n) {
for(int i = ; i <= n; ++i) {
G[i].clear();
vis[i] = false;
}
} void dfs1(int u, int p) {
d[u] = ;
par[u] = p;
son[u] = ;
for(int i = ; i < G[u].size(); ++i) {
int v = G[u][i];
if(v == p)
continue;
dfs1(v, u);
d[u] += d[v];
++son[u];
}
} void dfs2(int u) {
d2[u] = ;
vis[u] = true;
int num = , num2 = ;
for(int i = ; i < G[u].size(); ++i) {
int v = G[u][i];
if(!vis[v])
dfs2(v);
d2[u] += d2[v];
if(d[v] > d2[v]) {
++num;
}
num2++;
}
if(num + (son[u] - num2) > ) //符合条件 (不同子树中重要点)>=2;
return ;
else
cnt++;
} int main()
{
int t, n, m, u, v, q;
scanf("%d", &t);
for(int ca = ; ca <= t; ++ca) {
scanf("%d %d", &n, &m);
init(n);
for(int i = ; i < n; ++i) {
scanf("%d %d", &u, &v);
G[u].push_back(v);
G[v].push_back(u);
}
printf("Case #%d:\n", ca);
dfs1(, );
init(n);
while(m--) {
scanf("%d", &q);
for(int i = ; i <= q; ++i) {
scanf("%d", a + i);
vis[a[i]] = true;
}
for(int i = ; i <= q; ++i) {
if(vis[par[a[i]]]) {
G[par[a[i]]].push_back(a[i]);
}
}
for(int i = ; i <= q; ++i) {
vis[a[i]] = false;
}
cnt = ;
for(int i = ; i <= q; ++i) {
if(!vis[a[i]]) {
dfs2(a[i]);
}
}
for(int i = ; i <= q; ++i) {
vis[a[i]] = false;
G[a[i]].clear();
}
printf("%d\n", n - cnt);
}
}
return ;
}

HDU 5927 Auxiliary Set (dfs)的更多相关文章

  1. HDU 5927 Auxiliary Set 【DFS+树】(2016CCPC东北地区大学生程序设计竞赛)

    Auxiliary Set Time Limit: 9000/4500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tot ...

  2. hdu 5927 Auxiliary Set 贪心

    Auxiliary Set Time Limit: 9000/4500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Pr ...

  3. hdu 5927 Auxiliary Set

    传送门 分析:感觉这道题有点意思.就写一篇mark一下吧. 现场比赛的时候去枚举了儿子用了线段树+dfs序,和预想的一样T了. 可以换一个想法,从儿子对父亲的贡献来思考. 在点中先假设一个节点的每一个 ...

  4. F - Auxiliary Set HDU - 5927 (dfs判断lca)

    题目链接: F - Auxiliary Set HDU - 5927 学习网址:https://blog.csdn.net/yiqzq/article/details/81952369题目大意一棵节点 ...

  5. HDOJ(HDU).2660 Accepted Necklace (DFS)

    HDOJ(HDU).2660 Accepted Necklace (DFS) 点我挑战题目 题意分析 给出一些石头,这些石头都有自身的价值和重量.现在要求从这些石头中选K个石头,求出重量不超过W的这些 ...

  6. HDOJ(HDU).1045 Fire Net (DFS)

    HDOJ(HDU).1045 Fire Net [从零开始DFS(7)] 点我挑战题目 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架/双重DFS HD ...

  7. HDOJ(HDU).1241 Oil Deposits(DFS)

    HDOJ(HDU).1241 Oil Deposits(DFS) [从零开始DFS(5)] 点我挑战题目 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架 ...

  8. HDOJ(HDU).1035 Robot Motion (DFS)

    HDOJ(HDU).1035 Robot Motion [从零开始DFS(4)] 点我挑战题目 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架/双重DF ...

  9. HDU 1501 Zipper 【DFS+剪枝】

    HDU 1501 Zipper [DFS+剪枝] Problem Description Given three strings, you are to determine whether the t ...

随机推荐

  1. 代码记录:使用Aforge.net让视频图像反转180度

    private void CameraConn() { videoSource = new VideoCaptureDevice(videoDevices[tscbxCameras.SelectedI ...

  2. 关于微信扫描二维码下载apk文件的细节设计

    微信使用的人数越来越多,渐渐的用户形成了一种习惯,扫描二维码的时候,也会打开微信去扫描,但是微信不支持第三方的链接下载,有些厂商已经发现了这一特点,所以在使用二维码下载自家的app时,会做一个提示,引 ...

  3. 【转】XCode环境变量及路径设置 -- 待学习

    原文网址:http://www.cnblogs.com/oc-bowen/p/5140541.html 一般我们在xcode里面配置包含工程目录下头文件的时候,都要关联着相对路径和绝对路径,如果只是自 ...

  4. sort方法的使用、随机数的产生

    如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序. var arr = ['a','b','m','c','d']; arr.sort(); ...

  5. 常见排序算法基于JS的实现

    一:冒泡排序 1. 原理 a. 从头开始比较相邻的两个待排序元素,如果前面元素大于后面元素,就将二个元素位置互换 b. 这样对序列的第0个元素到n-1个元素进行一次遍历后,最大的一个元素就“沉”到序列 ...

  6. [再寄小读者之数学篇](2014-11-19 $\tan x/x$ 在 $(0,\pi/2)$ 上递增)

    $$\bex \frac{\tan x}{x}\nearrow. \eex$$ Ref. [Proof Without Words: Monotonicity of $\tan x/x$ on $(0 ...

  7. 让jquery.tmpl.js支持index序号

    在写Web程序时,想简单处理会使用JS模板,常用的是Jquery的jquery.tmpl.js插件.整个插件还是比较好用的,后续有机会结合实际应用案例,分享下应用方法. 本次文章想分享的一点是其中的一 ...

  8. Delphi RxRichEdit高级操作

    unit InsertRichEditUnit;interfaceuses  Windows, Messages, SysUtils, Classes, Graphics, Controls, For ...

  9. 15stl模板

    1.stack #include<iostream> #include<stdio.h> #include<stack> using namespace std; ...

  10. 动态定义数组 .xml

    pre{ line-height:1; color:#3c3c3c; background-color:#d2c39b; font-size:16px;}.sysFunc{color:#627cf6; ...