首页 > 其他分享 >24/04/27 图论及 dfs 序相关

24/04/27 图论及 dfs 序相关

时间:2024-04-27 19:55:25浏览次数:28  
标签:24 10 le 04 int dfs 返祖 27 节点

\(\color{green}(1)\) CF721C Journey

  • 给定一张 \(n\) 个点 \(m\) 条边的有向无环图,边有边权。构造一条 \(1 \to n\) 的路径使得其边权和 \(\le k\) 且经过的点数最多。
  • \(n, m \le 5 \times 10^3\),\(k \le 10^9\)。

最简单的想法是设状态 \(f_{i, j}\) 表示 \(1 \to i\) 的边权和 \(\le j\) 的路径的最多点数。那么答案为 \(f_{n, k}\)。

显然状态数会爆炸。参照 AT_dp_e 的思路,我们将状态和值交换,即重新令 \(f_{i, j}\) 表示 \(1 \to i\) 的路径上经过了 \(j\) 个点的最小边权和。剩下的就是平凡的转移了。

\(\color{green} (2)\) CF731C Socks

  • 你有 \(n\) 只袜子,共有 \(k\) 种颜色,有 \(m\) 天。每只袜子有它的初始颜色。在第 \(i\) 天,你会穿第 \(l_i\) 只和第 \(r_i\) 只袜子。求最少改变多少袜子的颜色,使得你每天穿的两只袜子颜色相同。
  • \(n, k, m \le 2 \times 10^5\)。

将 \(l_i, r_i\) 连边,会形成若干个连通块。显然每个连通块内的袜子颜色应该是相同的。

对于每个连通块独立考虑。我们希望将这个连通块内的颜色统一,且操作次数最少,最直观的想法就是全部染成出现次数最多的颜色。

令连通块大小为 \(s\),最多的颜色出现了 \(t\) 次,那么答案即 \(\sum (s - t)\)。

\(\color{green}(3)\) CF412D Giving Awards

  • 请你构造 \(1 \sim n\) 排列 \(P\),满足给定的 \(m\) 条形如 \((u, v)\) 的限制,表示不存在 \(P_i = u\) 且 \(P_{i + 1} = v\)。保证不存在两个限制 \(\mathbf{(u, v)}\) 和 \(\mathbf{(v, u)}\)
  • \(n \le 3 \times 10^4\),\(m \le 10^5\)。

连 \(u \to v\) 的有向边,然后 dfs 整张图。在 \(u\) 的出边全部访问结束后,将 \(u\) 加入答案队列的队尾。

考虑证明这种构造一定是正确的。可以画出一颗 dfs 树,分析三种边的合法性:

  • 树边,例如 \(4 \to 5\)。根据我们的做法,\(4\) 一定在 \(5\) 之后访问。这样是合法的。
  • 返祖边,例如 \(3 \to 1\)。由于题目保证「不存在两个限制 \((u, v)\) 和 \((v, u)\)」,所以这条返祖边一定不是指向它的父亲,而是跨越至少一个点。这意味着尽管有 \(3 \to 1\) 这条边,但由于 \(1\) 是祖先,所以它已经在前面被访问过,再次访问到 \(3\) 时它们之间已经隔着若干个点了(例如图中的 \(2\))。所以这样是合法的。
  • 横叉边,例如 \(5 \to 3\)。同样的思路,在树上 \(3, 5\) 一定不是直接相连的,而是隔着几个点。这样也是合法的。
$\color{blue}\text{Code}$
#include <bits/stdc++.h>

using namespace std;

const int N = 2e5 + 10;

int n, m;
vector<int> g[N];
bool st[N];

void dfs(int u) {
    if (st[u]) return;
    st[u] = true;
    for (int v : g[u]) dfs(v);
    cout << u << ' ';
}

int main() {
    cin >> n >> m;
    while (m -- ) {
        int a, b;
        cin >> a >> b;
        g[a].push_back(b);
    }
    for (int i = 1; i <= n; ++ i ) dfs(i);
    return 0;
}

\(\color{blue} (4)\) CF118E Bertown roads

  • 给定一张 \(n\) 个节点 \(m\) 条边的无向联通图。构造一种为每条边都确定一个方向的方案,使得这张图成为一个 scc。或报告无解。
  • \(n \le 10^5\),\(m \le 3 \times 10^5\)。

若原图不是一个 dcc,即存在桥,那么一定无解。这是显然的。

否则,我们建一颗 dfs 树,并将树边的方向定为 父亲 \(\to\) 儿子,将返祖边的方向定为 后代 \(\to\) 祖先。显然不存在横叉边。

考虑证明这样做是可行的:

  • 由于树边都是向下指,所以祖宗可以到达它的所有后代,包括但不限于祖先可以到达所有节点。
  • 对于叶子节点,由于图中不存在桥,所以它一定存在一条返祖边。而这条边指向的祖宗要么为根,要么也存在一条返祖边。以此类推。所以叶子节点总能到达根。然后到达所有节点。
  • 对于一般的节点,它可以通过树边到达叶子,再到达根,再到达所有节点。

标签:24,10,le,04,int,dfs,返祖,27,节点
From: https://www.cnblogs.com/2huk/p/18162417

相关文章

  • 2024.04.27 笔记,下午
    b/s架构和c/s架构(重点)(1)bs:浏览器------服务器(web)b:broeser浏览器s:server服务器bs的应用:论坛,百度,知乎,豆瓣,csdn,博客园(2)cs架构:客户端-----服务器(app)c:client客户端s:server服务器cs应用:抖音,微信,qq,快手,酷狗区别:(1)bs不需要更新,直接通过浏览器输入网址进行访问;......
  • 今日模拟前端面试10道题 看你能答对几道 24.4.27
    1.介绍Promise的特性,优缺点Promise是JavaScript中用于处理异步操作的一种对象。Promise的特性:状态:Promise有三种状态,分别是pending(进行中)、fulfilled(已成功)和rejected(已失败)。不可逆性:一旦Promise的状态改变,就不能再被修改,无论是从pending变为fulfilled还是从pending变为reje......
  • [官方培训] 24-UE 非线性动画制作流程 Epic 戴浩军
    传送门:[官方培训]24-UE非线性动画制作流程|Epic戴浩军_哔哩哔哩_bilibili一.UE非线性动画制作流程参考《堡垒之夜预告片》白皮书,虽发布于2018年,但其包含的实时动画制作流程所涉及的核心概念,至今仍然适用 在开始设计制作流程前,需先明确流程目标 设计工作流......
  • es笔记20240427
    postfilter    聚合结果统计topagges对聚合结果源数据统计   ......
  • web server apache tomcat11-24-Virtual Hosting and Tomcat
    前言整理这个官方翻译的系列,原因是网上大部分的tomcat版本比较旧,此版本为v11最新的版本。开源项目从零手写实现tomcatminicat别称【嗅虎】心有猛虎,轻嗅蔷薇。系列文章webserverapachetomcat11-01-官方文档入门介绍webserverapachetomcat11-02-setup启动web......
  • XYCTF2024-web-wp
    怎么全是傻逼绕过题。不想评价,就随便打着玩,除了最后一道java反序列化搞心态,其他的ak了:简单题不想说,http注意一下代理是用Via就行,warmup直接:http://xyctf.top:37034/?val1=240610708&val2=QNKCDZO&md5=0e215962017&XYCTF=240610708&XY=240610708LLeeevvveeelll222.phpget......
  • 2024-04-27:用go语言,在一个下标从 1 开始的 8 x 8 棋盘上,有三个棋子,分别是白色车、白色
    2024-04-27:用go语言,在一个下标从1开始的8x8棋盘上,有三个棋子,分别是白色车、白色象和黑色皇后。给定这三个棋子的位置,请计算出要捕获黑色皇后所需的最少移动次数。需要注意的是,白色车可以垂直或水平移动,而白色象可以沿对角线移动,它们不能跳过其他棋子。如果白色车或白色象......
  • 题解:P10329 [UESTCPC 2024] Add
    Add题意将序列进行一系列的操作,输出对\(a_{1}\)的期望值。题目中操作说的比较明了,再次就不特殊声明了。思路据题意所知,每一个\(n\)应该对应了一个固定的答案。于是我就想到可以打表,就打出了下面的式子。n=1时ans=1n=2时ans=5n=3时ans=14n=4时ans=30n=5时ans=5......
  • pwn知识——劫持tcache_perthread_struct(Ubuntu22.04之前)
    前言(可忽略)堆不愧是堆...知识点真的要多用动调查看堆的状态才好理解tcache_perthread_struct的结构源码#defineTCACHE_MAX_BINS64/*Weoverlaythisstructureontheuser-dataportionofachunkwhenthechunkisstoredintheper-threadcache.*/typedefst......
  • 2024 天元公学邀请赛夺金记
    2024.4.14今天是初赛,本来以为初赛就上机,没想到是笔试。考试时有个程序没想出来是什么算法,只能手动模拟,算了很久,后来算出一个580,结果发现最近的一个是579,其他都差得很远,直接选了上去。因为当时快没时间了,赛后才发现少减了一个,xjy和cjz都说是容斥,%%%。2024.4.17初赛稳稳当当......