首页 > 其他分享 >刷题日记

刷题日记

时间:2024-03-27 15:44:05浏览次数:24  
标签:连通 坍塌 割点 叶子 逃生 刷题 日记 分量

Update On:2024/3/26

P8867 建造军营

显然,当且仅当桥被摧毁时图才会变成两个子图,那么可以想到 Tarjan 求边双联通,重构成一棵树。

定义 \(f_{i,0/1}\) 为强制只有根节点为 \(u\) 的子树内建筑军营,若里面有军营则,一定有被守卫的边与 \(u\) 相通。

P3225 [HNOI2012] 矿场搭建

分类讨论:

1.环

如果在一个环上,每两个点都可以互相直达,那么我们可以设置任一个点作为逃生出口,即可满足其他所有点到达这个地方。但是要考虑逃生出口坍塌的情况,所以一个环上要设置两个逃生出口,可以使无论逃生出口是否坍塌,都有一个逃生出口可用。n个点中任选两个点。

2.一般情况

割点会分整个图为多个双连通分量,我们将每个双联通分量看作整个联通块,那么一个双连通分量中只需要设置一个点,就可以满足这个分量里的点能够跑到这个出口来。同上,我们还要考虑出口坍塌的情况。在这里,因为只会坍塌一个点,所以如果出口坍塌了,割点就不会坍塌,这个分量中的其他点可以通过割点跑到另外的双连通分量中,此时等价于同一个双连通分量。我们可以继续将这些点抽象为一个概念:叶子连通块。

3.叶子连通块

叶子节点是没有出度的点,入度为1,也就是只连了一条边。那么叶子连通块的概念就是:只连接了一个割点的双连通分量。 同时,对于连接两个割点的双连通分量,其中一个割点坍塌,那么另一个割点就不会坍塌,可以通过另一个割点合并到另外一个双连通分量中。而叶子连通块就不行了,如果叶子连通块的割点(叶子的父亲)被切断,那么它就是一个单独的连通块,所以这里一定要设置一个逃生出口。在这里设置一个逃生出口,有weight种选择(weight是节点数)。根据乘法原理,最小个数是叶子连通块的个数;总方案数是所有叶子连通块的weight之积。

所以我们只需要判断一个连通块dfs后是否只找到一个割点(用del数组存起来)

Update On : 2024/3/27

P4320 道路相遇

显然如果对于两个点 \(u,v\) 如果删掉他们之间的任意一个割点,则他们一定不连通,所以割点是必经的,如果删掉非割点,由割点定义可得一定有另一条路径使得两点连通。直接建圆方树求割点即可。

标签:连通,坍塌,割点,叶子,逃生,刷题,日记,分量
From: https://www.cnblogs.com/muleaf/p/18099457

相关文章

  • 动态规划刷题(算法竞赛、蓝桥杯)--数字三角形(线性DP)
    1、题目链接:[USACO1.5][IOI1994]数字三角形NumberTriangles-洛谷#include<bits/stdc++.h>usingnamespacestd;intr;constintN=1010;inta[N][N];intmain(){ cin>>r; for(inti=1;i<=r;i++){ for(intj=1;j<=i;j++){ cin>>a[i][j]; ......
  • Hive 刷题——累计占比问题
    问题描述现在有一张每个年份的每个部门的收入表。现在需要算每个部门的收入占同类型部门的收入的占比和当年整个公司的收入占比。要求一条SQL计算出来。比如研发部和产品部属于同类型的,都是产研;财务部和人事部都属于职能。yeardeptincome2024研发部50002024......
  • 小阳同学刷题日记-209. 长度最小的子数组
        题目: 给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl,numsl+1,...,numsr-1,numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。    惯例,献上我自......
  • LeetCode刷题Day11(补卡)
    20.有效的括号题目链接:leetcode20.有效的括号文章讲解:代码随想录视频讲解:哔哩哔哩视频这题考察的是栈的使用,遍历字符串,如果是左括号存入栈中,如果是右括号则对比栈的头部是否为与之匹配的左括号,如果不是则返回false,最后若栈为空则正好匹配返回true,详细代码如下:cl......
  • 蓝桥杯刷题(十四)
    1.小平方代码n=int(input())count=0deff(x)->bool:#判断条件returnTrueifx**2%n<n/2elseFalseforiinrange(1,n):#遍历[1,n-1],符合题意计数加一iff(i):count+=1print(count)2.3的倍数代码a=int(input())b=int(input())......
  • 力扣刷题之21.合并两个有序链表
    仅做学习笔记之用。题目:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例1:输入:l1=[1,2,4],l2=[1,3,4]输出:[1,1,2,3,4,4]示例2:输入:l1=[],l2=[]输出:[]示例3:输入:l1=[],l2=[0]输出:[0]......
  • 每日刷题 例题训练 两数相加
    一.题目给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例:输入:nums=[3,2,4],......
  • python刷题
    题目:编写一个程序将分钟转换为秒。定义函数convert_to_seconds(),参数为minutes。在函数内,将分钟转换为秒(1分钟=60秒),并返回结果。实验1: 运行结果:实验2: 运行结果: 理由是什么呢? ......
  • 刷题笔记 3.25
    ABC254C题:给定一个长为n的数列,给定k,可以进行的操作是:交换a[i]和a[i+k],可以进行任意多次,问能否sort成一个非递减数列?我当时的思路:因为我们是知道最后的数列的样子的,然后就思考:“这个数怎么变过来?可以变吗?”然后就发现好像只需要最后的非递减数列的每一个数在原数列中的对应下标......
  • 【旅游景点项目日记 | 第二篇】基于Selenium爬取携程网景点详细数据
    文章目录3.基于Selenium爬取携程网景点详细数据3.1前提环境3.2思路3.3代码详讲3.3.1查询指定城市的所有景点3.3.2获取详细景点的访问路径3.3.3获取景点的详细信息3.4数据库设计3.5全部代码3.6效果图3.基于Selenium爬取携程网景点详细数据3.1前提环境确保安装pytho......