首页 > 其他分享 >Auxiliary Set题解

Auxiliary Set题解

时间:2022-11-19 20:56:56浏览次数:81  
标签:tmp vet Set Auxiliary int 题解 dep un cout

F Auxiliary Set

树上LCA + DFS
注意一下输出格式!

#include<bits/stdc++.h>
using namespace std;

const int N = 1e5 + 10;
int t, n, q, ans;
int fa[N]; // 存储点i的父亲节点
int son[N], tmp[N];//存儿子节点
int un[N];//存不重要的点序列
int dep[N];//存深度
bool vis[N];
vector<int> vet[N];

void dfs(int u, int f, int d){
    fa[u] = f;
    dep[u] = d;
    vis[u] = true;
    for(int i = 0; i < vet[u].size(); i++){
        int j = vet[u][i];
        if(!vis[j]){
            //不能把父亲也加到儿子当中
            son[u] ++;
            dfs(j,u,d + 1);
        }
    }
}

bool cmp(int a, int b){
    return dep[a] > dep[b];
}

signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    cin >> t;
    for(int tot = 1; tot <= t; tot ++){
        cin >> n >> q;
        for(int i = 1; i <= n; i++){
            vis[i] = false;
             son[i] = 0;
            vet[i].clear();
        }
        for(int i = 1; i <= n - 1; i ++){
            int a, b;
            cin >> a >> b;
            vet[a].push_back(b);
            vet[b].push_back(a);
        }
        dfs(1,0,0);
        cout << "Case #" << tot <<":" << endl;
        for(int j = 1; j <= q; j ++){
            int k;
            cin >> k;
            ans = n - k;
            for(int i = 1;i <= k; i++){
                cin >> un[i];
                tmp[un[i]] = son[un[i]];
            }
            //从深度更深的节点开始遍历
            sort(un + 1, un + 1 + k, cmp);
            for(int i = 1; i <= k; i++){
                if(tmp[un[i]] >= 2){
                    ans ++;
                }
                else if(tmp[un[i]] == 0){
                    tmp[fa[un[i]]] --;
                }
            }
            cout << ans << endl;
        }
    }
    return 0;
}

标签:tmp,vet,Set,Auxiliary,int,题解,dep,un,cout
From: https://www.cnblogs.com/N-lim/p/16907007.html

相关文章

  • 广东工业大学第十六届程序设计竞赛题解(部分)
    E爬塔方法一:二分做法预处理每个点所能到达的最远距离,存到vector里边,然后二分处理结果#include<bits/stdc++.h>usingnamespacestd;constintN=1e5+10;intn,......
  • F - Subarrays题解
    F-Subarrays题意:给你一个序列,问这个序列里有多少个子串的和能被k整除。思路:求前缀和,然后每个位置对k取模,模数相等的位置之间,是一个满足条件的字串。因为求的是前缀和,......
  • G water testing题解
    Gwatertesting题意:给你一个多边形(可能是凸多边形,也可能是凹多边形),问该多边形内有多少个整数点(不包含边界)。思路:皮克定理+叉乘计算三角形面积:皮克定理是指一个计算点......
  • Frogger题解
    Frogger法一:floyd#include<iostream>#include<cstring>#include<algorithm>#include<cstdio>#include<cmath>#include<iomanip>#defineintlonglongintusingn......
  • 2022 zafu校赛题解
    A煎饼哥哥好鲨题读入时,分别统计四种不同提交结果,最后按题目要求输出即可。代码链接B富哥磊神暴力枚举三种纸币的数量,统计合法付款方式的数量即可。注意优化暴力枚举......
  • python(牛客)试题解析2 - 中等
    导航一、NC192二叉树的后序遍历二、NC117 合并二叉树三、求长度最长的的连续子序列使他们的和等于sum四、按顺序取出固定长度内容并合并两个数组为一个新数组五、输......
  • python 安装Basemap 以及cannot import name ‘dedent’ from ‘matplotlib.cbook’问
    我用的是anaconda管理工具,运行安装condainstallbasemap或者直接在anaconda,navigator中搜索basemap,进行安装  问题:cannotimportname‘dedent’from‘matplot......
  • 11.19考试题解
    记录一下爆炸的模拟赛。T1原题,这道题的题解之前写过,在这。T2由于边数接近点数,整个图的形态接近树,想到建出原图的一个生成树(任意一个),这样两个点的距离分为两类:只经过......
  • 牛客小白月赛 61 题解
    前言以下内容转自官方首先,十分抱歉给大家带来了不好的比赛体验,下面是比赛中出的大锅。锅1:B题是出题人在读CSAPP时想到的一道小模拟,但在题目描述时出了问题,应该......
  • java——集合——Set集合——可变参数
    可变参数可变参数:是JDK1.5之后出现的新特性使用前提:当方法的参数列表数据类型已经确定,但是参数的个数不确定,就可以使用可变参数.使用格式:定义方法时使用修饰符......