首页 > 其他分享 >开学大二补题(第二周)

开学大二补题(第二周)

时间:2023-09-12 20:01:21浏览次数:37  
标签:include const int 入队 第二周 补题 n1 边数 大二

这几天比赛发现短板很明显,写题异常慢,但是题是可以写出来的

还有就是wa的太随便动不动就是一个很简单的点给我wa了

总之,题刷少了

Problem - H - Codeforces

题意:就是给你一个棵树,这棵树分很多的叶子 一共n个点   然后让你对这个树进行层减

一共减k层 就是一层一层的去掉,然后输出还剩点的个数

 

题解:这道题就是一个拓扑排序的题

很好想,一层一层搞我们发现就和这些点的边数有关边数少的绝对最最低层

所以我们可以记录每一个点连起来的边数只要出度为1那么这个点就是最底层的点我们就删除即可

然后跑一个广搜    这样的首先记录现在就是1的底层点如何入队就可以了

跑队列的时候就用这些1的点因为底层的点被我们剪掉了,所以边也没了,和这些底层相连的点边数就要减减,然后减完看看这个点是不是边数只有1了

如果是那么然后减的层数不够,这点就入队,够就不入队,就行了

#include <bits/stdc++.h>
#pragma  GCC optimize("Ofast")
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <cmath>
//#define double long double
#define int long long
//#define endl '\n';
using namespace std;
const int N=1e6+5,M=1e1;
const int INF = 0x3f3f3f3f;
const int mod=998244353;
typedef pair<int,int> PII;
int bian[N];

int n1,k1;
int dep[N];
vector<int> a[N];
int su;
void bfs(int n,int k)
{
    queue<int> q;
    for(int i=1;i<=n;i++)
    {
        if(bian[i]==1)
        {
            q.push(i);
            bian[i]=0;
            su++;
            dep[i]=1;
        }
    }
    while (!q.empty())
    {
        int u=q.front();
        q.pop();
        for(auto x:a[u])
        {
            bian[x]--;
            if(bian[x]==1 && dep[u]<k)
            {
                su++;
                q.push(x);
                dep[x]=dep[u]+1;
            }
        }
    }
}
void solve() {

    cin>>n1>>k1;
    for(int i=1;i<=n1;i++) bian[i]=0, dep[i]=1, a[i].clear();
    su=0;
    for(int i=1;i<n1;i++)
    {
        int x,y;
        cin>>x>>y;
        a[x].push_back(y);
        a[y].push_back(x);
        bian[x]++;
        bian[y]++;
    }
    if(n1==1 || 2*k1>=n1)
    {
        cout<<0<<endl;
        return;
    }
        bfs(n1,k1);
        cout<<n1-su<<endl;



}


signed main(){
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    int T=1;
    cin>>T;
    while(T--){
        solve();
    }
    return 0;
}

 

标签:include,const,int,入队,第二周,补题,n1,边数,大二
From: https://www.cnblogs.com/whatdo/p/17697678.html

相关文章

  • 大二打卡(9.11)
    今天做了什么:今天上了一下午王老师的课,第一节课,同学们展示自己的开学考试代码,两位十五分的同学他们的代码都非常优秀,我的代码很多功能当时为了抢分很多都没有实现,最关键的一个功能就是判断输入的合法性,一开始说实话没怎么在意过这个功能,甚至可以说从大一开始学编程的时候就没那么......
  • 大二上 23.9.11
    今天学习了很多。1.编程的根本:顺序、循环和分支。2.编程思维就是分解--识别模式--抽象--算法四个步骤组成。3.StringJava中是类,它所包含的是对象,不能直接等于。4.Java语言规范:https://docs.oracle.com/javase/specs//5.学习java:https://www.runoob.com/java/java-tutorial.......
  • 代码随想录:● 654.最大二叉树 ● 617.合并二叉树 ● 700.二叉搜索树中的搜索 ● 98
     654.最大二叉树 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。通过给定的数组构建最大二叉树,并且输出这个......
  • 大二暑假第八周博客
    已经是第八周,最后一周了,这周的博客我准备以实际的操作为主,主要就是一些常用的sql语句  1.union(可以将查询结果集相加)案例:找出岗位是SALEMAN和MANAGE的员工第一种:selectename,jobfromempwherejob='MANAGE'orjob'SALEMAN';第二种:selectename,jobfromempwhere......
  • 暑假第二周周记
    本周休息在家,什么都没做,每天都在家里休息,享受假期时光,没有学习。周一,在家休息,早上起床吃饭后就玩游戏,玩游戏玩的无聊了就去看小说,中午吃完饭睡个午觉起床继续打游戏,打游戏无聊了继续看小说。吃完晚饭之后会帮家里洗碗,晚上打会儿游戏,十点准时洗澡睡觉。周二,在家休息,......
  • 2021 ICPC 沈阳站 补题
    E.EdwardGaming,theChampion签到题,扫一遍判断就行F.EncodedStringsI简单题,先\(O(n^2)\)大力预处理出来所有字符串,然后直接sortB.BitwiseExclusive-ORSequence题意简述一个需要填数的序列,给定多个限制,每个限制形如\(a_u\oplusa_v=a_w\)表示第\(u\)个数......
  • ARTS打卡---第二周
    Algorithm力扣中等题:2825. 循环增长使字符串子序列等于另一个字符串解题思路:可变化为找子串,双指针遍历,对于字符'z'做特殊处理即可。ReviewGoogle的分布式存储经典论文,Bigtable:ADistributedStorageSystemforStructuredData阅读完第二部分,下周继续学习。Tip性能分......
  • 大二上半学期应该怎么学习?
          暑假快过去了,想起自己上个学期的失败和别人在各种空间上的凌云壮志,我深感惭愧和悔恨,我有很多缺点,改不了,我想改,很难!我的决心:下个学期我要学好、学精、学通的学科是下个学年的目标是:拿学院的第一名,拿奖学金下个学期要完成的事是:1学习是第一位(一定要把学习搞好,不能再让......
  • 代码随想录算法训练营第二十天| 654.最大二叉树 617.合并二叉树 700.二叉搜索树
      654.最大二叉树    卡哥建议:又是构造二叉树,昨天大家刚刚做完 中序后序确定二叉树,今天做这个 应该会容易一些, 先看视频,好好体会一下 为什么构造二叉树都是 前序遍历    题目链接/文章讲解:https://programmercarl.com/0654.%E6%9C%80%E5%A4%A7%E4%BA%8C%E5......
  • 大二暑假第五周博客
    第五周,一些python的代码,有一些bug还没找出来{"cells":[{"cell_type":"markdown","id":"f427f82c","metadata":{},"source":["#第一题"]},{"cell_type&......