原先有一个图,dfs序是1,2,...,n, 但是其中一些边被破坏,给定被破坏边后的图,求最少要加几条边,可以使图的dfs序为1,2,...,n

news/2024/7/7 19:55:45

题目

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pb push_back
const int maxn = 2e5 + 5, maxm = 2e3 + 5;
int a[maxn];
int nxt;//下一个应该遍历的结点
int res = 0;
int n, m;
vector<int> G[maxn];
void dfs(int u){
    if(u == nxt) nxt++;
    for(int i = 0; i < G[u].size();){//这里不写i++
        int v = G[u][i];
        if(v < nxt){//之前遍历过的结点,跳过
            i++;
            continue;
        } 
        if(v > nxt){
            res++;
            dfs(nxt);//这里不i++, 等把nxt~v-1的结点遍历完再dfs(v)
            /*
            1
            4 1
            1 3
            */
        }
        else{
            dfs(v);
            i++;
        }
    }
}
void solve(){
	cin >> n >> m;
    for(int i = 1; i <= n; i++){
        G[i].clear();
    }
    res = 0;
    for(int i = 1; i <= m; i++){
        int u, v;
        cin >> u >> v;
//         if(u == v) continue;
//         if(u > v) swap(u, v);
        G[u].push_back(v);
        G[v].push_back(u);
    }
    for(int i = 1; i <= n; i++){
        sort(G[i].begin(), G[i].end());//按顺序来
    }
    nxt = 1;
    while(nxt <= n){
        res++;//向nxt连一条边
        dfs(nxt);
    }
    cout << res - 1 << '\n';//减去向1连的一条边
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	int T;
	cin >> T;
	while(T--){
		solve();
	}
}


http://lihuaxi.xjx100.cn/news/1966430.html

相关文章

深入浅出Pytorch宝典1.0

文章目录 前言1. 张量操作2. 自动微分3. 数据加载和处理4. 模型构建和训练5. 预训练模型和迁移学习6. 调试和性能7. 高级特性总结 torch中主要的数据对象主要特点和功能张量的创建 数据处理和转换1.torch.tensor() 创建一个新的张量&#xff08;Tensor&#xff09;2.torch.zero…

Visual Studio常用快捷键及调试操作

CtrlF10 运行到光标处 调试时候不用一行行按F10了CtrlMM 折叠或展开当前方法CtrlMO 折叠所有方法CtrlML 展开所有方法CtrlEW 自动换行/取消自动换行CtrlU 选中文本转小写CtrlShiftU 选中文本转大写CtrlWinO 启动软键盘F9 光标行加断点CtrlAltB 打开断点窗口 或通过Debug -> …

微服务自动化docker-compose

一、docker-compose介绍 Docker Compose是一个用来定义和运行多个复杂应用的Docker编排工具。例如&#xff0c;一个使用Docker容器的微服务项目&#xff0c;通常由多个容器应用组成。那么部署时如何快速启动各个微服务呢&#xff0c;一个个手动启动&#xff1f;假如有上百个微服…

DA14531-外设驱动篇-UART收发通信应用

目录 1.I2C通信相关文件2.宏定义列表3.主要函数接口4.串口发送数据5.串口接收数据1.I2C通信相关文件 1)uart.c和uart.h(SDK文件) 2)app_uartProtocol.c和app_uartProtocol.h(用户应用文件) 2.宏定义列表 宏定义注解CFG_PRINTF用户开启串口CFG_PRINTF_UART2串口打印宏UA…

【UnityShader入门精要学习笔记】第四章(4)矩阵的几何意义

本系列为作者学习UnityShader入门精要而作的笔记&#xff0c;内容将包括&#xff1a; 书本中句子照抄 个人批注项目源码一堆新手会犯的错误潜在的太监断更&#xff0c;有始无终 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 文章目录 复习知识点复习矩阵加减矩阵…

服务接口调用 OpenFeign

服务接口调用 OpenFeign Spring Cloud OpenFeign 是一个基于Java的声明式HTTP客户端框架&#xff0c;用于简化编写HTTP请求和处理HTTP响应的过程。它是Spring Cloud生态系统中的一部分&#xff0c;旨在简化微服务架构中的服务间通信。 1. 介绍 Feign 是 NetFlix 开发的一个轻…

C语言代码 计算1!+2!+3!+4!+5!+6!+7!+8!+9!+10!

计算1!2!3!4!5!6!7!8!9!10! 代码示例&#xff1a; #include <stdio.h> int main() {int i 0;int n 0;int ret 1;int sum 0;for (n 1; n < 10; n){ret 1;for (i 1; i < n; i){ret ret * i;}sum sum ret;}printf("%d\n", sum);return 0; } 运…

双网卡绑定和bond7种模式

双网卡绑定,bond有7种模式 0:round-robin(轮询调度算法):给bond绑定的网卡按照顺序依次发送数据,提供负载均衡和容错能力,交换机需要配置trunking 1:active-backup(主备模式):只有一个设备处理数据,当他宕机时就会由备份代替它,仅提供容错能力,交换机不需要配置trunking 2:load…