【拓扑剪枝+深搜剪枝/计数】2024睿抗-章鱼图的判断

news2025/6/7 12:42:28

题目描述

对于无向图 G = ( V , E ) G=(V,E) G=(V,E),我们将有且只有一个环的、大于 2 2 2 个顶点的无向连通图称之为章鱼图,因为其形状像是一个环(身体)带着若干个树(触手),故得名。

给定一个无向图,请你判断是不是只有一个章鱼子图存在。

注意:这里的章鱼子图指的是满足章鱼图性质的极大连通子图。

输入格式

输入第一行是一个正整数 T T T,表示数据的组数。

每组数据的第一行是两个正整数 N , M N,M N,M,表示给定的无向图有 N N N 个点, M M M 条边。

接下来的 M M M 行,每行给出一条边两个端点的顶点编号。

注意:顶点编号从 1 1 1 开始,并且题目保证任何边不会重复给出,且没有自环。

输出格式

对于每组数据,如果给定的图里只有一个章鱼子图,则在一行中输出 Yes 和章鱼子图环的大小(及环中顶点数),其间以 1 1 1 个空格分隔。

否则,则在一行中输出 No 和图中章鱼子图的个数,其间以 1 1 1 个空格分隔。

数据范围

1 l e T l e 5 1 \\le T \\le 5 1leTle5,
1 l e N , M l e 10 5 1 \\le N,M \\le 10^5 1leN,Mle105

输入样例:
3
10 10
1 3
3 5
5 7
7 9
1 2
2 4
2 6
3 8
9 10
1 9
10 10
1 3
3 5
5 7
7 9
9 1
1 2
2 4
4 8
8 10
10 1
10 10
1 3
3 5
5 7
7 9
9 1
2 4
4 8
8 10
10 2
10 6
输出样例:
Yes 5
No 0
No 2

拓扑剪枝+深搜剪枝/计数

通过拓扑排序剥离无向图中的非环结构(“触手”),再通过DFS检测并统计剩余环的数量和大小,最终判断图中是否存在单一标准环(所有节点度数为2的连通环)或多个非常规环结构。

C++ 代码
/*
拓扑排序变种:以度数为衡量标准
    topsort 之效为剥除环之外的树状结构(谓之触手),留环(谓之头部)
    但须思忖余环呈多环嵌套或多环线连须去除
*/
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10,M = 1e5 + 10;
int h[N],e[2*M],ne[2*M],idx;
int d[N]; // 记录结点度数
int n,m;
int cnt,ans;

// 加边
void add(int a, int b){
    e[idx]=b;
    ne[idx]=h[a];
    h[a]=idx++;
}

void topsort(){
    // 初始化队列
    queue<int> q;
    // 度0/1入队
    for(int i=1;i<=n;i++){
        if(d[i] == 1) q.push(i);
    }
    // 取队首,(归序),削邻度
    // 度0/1入,周而复始,队空则成
    while(!q.empty()){
        int t=q.front();
        q.pop();
        // 度数要变化!!
        d[t]--;
        for(int i=h[t]; ~i ; i = ne[i]){
            int j=e[i];
            if(--d[j] == 1) q.push(j);
        }
    }
}

// 清除环并且记录环结点数
void dfs(int u){
    cnt ++;
    d[u]=0; // 清空当前节点的度数
    
    for(int i=h[u];~i;i=ne[i]){
        if(d[e[i]]) dfs(e[i]);
    }
}


void solve(){
    cin>>n>>m;
    // 清空 idx,h,d
    idx = 0;
    memset(h,-1,sizeof h);
    memset(d,0,sizeof d);
    // 初始化
    while(m--){
        int x,y;
        cin>>x>>y;
        add(x,y);add(y,x);
        d[x]++;d[y]++; // 度数加1
    }
    // topsort去除所有的非环
    topsort();
    // 去除所有的特异环
    for(int i=1;i<=n;i++){
        if(d[i]>0 && d[i]!=2){
            dfs(i);
        }
    }
    
    ans=cnt=0;
    for(int i=1;i<=n;i++){
        if(d[i] == 2){
            dfs(i);
            ans++;
        }
    }
    
    if(ans == 1){
        cout << "Yes" << " " << cnt << endl;
    }else{
        cout << "No" << " " << ans << endl;
    }
}

int main(){
    int T;
    cin>>T;
    while(T--){
        solve();
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2402905.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android基础回顾】六:安卓显示机制Surface 、 SurfaceFlinger、Choreographer

在 Android 系统中&#xff0c;Surface 和 SurfaceFlinger 是图形渲染系统的核心组件&#xff0c;负责屏幕显示内容的合成与管理。它们协同工作&#xff0c;使各种 App 和系统界面能够高效地显示在屏幕上。 1 Surface 是什么&#xff1f; Surface 是一个抽象的图形缓冲区接口…

敏捷开发中如何避免过度加班

在敏捷开发过程中避免过度加班&#xff0c;需要明确敏捷原则、合理规划迭代任务、加强团队沟通、优化流程效率、设定合理的工作负荷、注重团队士气和成员健康。明确敏捷原则&#xff0c;即保证可持续发展的步调&#xff0c;避免频繁地变更需求、过度承诺任务量。合理规划迭代任…

第1章_数据分析认知_知识点笔记

来自&#xff1a;数据分析自学课程-戴戴戴师兄 逐字稿&#xff1a;【课程4.0】第1章_分析认知_知识点笔记 【课程4.0】第1章 分析认知 知识点总结 数据分析的核心价值不是工具&#xff0c;而是用数据驱动业务增长。 一、数据分析的本质认知 数据分析是什么&#xff1f; 不是酷…

111页可编辑精品PPT | 华为业务变革框架及战略级项目管理华为变革管理华为企业变革华为的管理模式案例培训

这份文档是关于华为公司业务变革管理框架&#xff08;BTMS&#xff09;V2.0的详细介绍&#xff0c;涵盖从年度规划到项目执行的全流程管理。BTMS框架通过变革战略规划、年度规划流程、解决方案开发&#xff08;PMOP流程&#xff09;、运作管理流程等多个模块&#xff0c;系统地…

html文字红色粗体,闪烁渐变动画效果

1. 代码 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>红色粗体闪烁文字表格</title><s…

Linux文件系统详解:从入门到精通

无论是开发高性能应用还是进行系统级编程&#xff0c;文件系统都是我们必须掌握的基础知识。今天&#xff0c;我将带大家深入浅出地了解Linux文件系统的核心概念和工作原理。 一、Linux文件系统概述 Linux文件系统是操作系统中负责管理持久存储设备上数据的子系统。它不仅仅是…

Electron Fiddle使用笔记

文章目录 下载界面示意图保存和打开项目save 和 save as forge project 其他文档打包报错 RequestError: read ECONNRESET 想要打包前端程序&#xff0c;奈何本地环境总是报错&#xff0c;意外发现可以通过electron fiddle直接调试代码。 下载 百度网盘地址&#xff1a; 首次…

企业培训学习考试系统源码 ThinkPHP框架+Uniapp支持多终端适配部署

在数字化转型浪潮下&#xff0c;企业对高效培训与精准考核的需求日益迫切。一套功能完备、多终端适配且易于定制的培训学习考试系统&#xff0c;成为企业提升员工能力、检验培训成果的关键工具。本文给大家分享一款基于 ThinkPHP 框架与 Uniapp 开发的企业培训学习考试系统&…

SpringBoot手动实现流式输出方案整理以及SSE规范输出详解

背景&#xff1a; 最近做流式输出时&#xff0c;一直使用python实现的&#xff0c;应需求方的要求&#xff0c;需要通过java应用做一次封装并在java侧完成系统鉴权、模型鉴权等功能后才能真正去调用智能体应用&#xff0c;基于此调研java实现流式输出的几种方式&#xff0c;并…

深入解析I²C总线接口:从基础到应用

IC总线概述与基本概念 一句话概述&#xff1a;本章节将介绍IC总线的历史、定义及其在嵌入式系统中的作用&#xff0c;帮助读者建立对IC的基本理解。 IC&#xff08;Inter-Integrated Circuit&#xff09;总线是一种广泛应用于嵌入式系统中的串行通信协议&#xff0c;最初由飞利…

Sklearn 机器学习 缺失值处理 检测数据每列的缺失值

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在代码与灵感交织的数字世界里和大家相遇~💖 ✨ 在这个技术浪潮奔涌的时代,我们既是探索者,也是分享者。我始终相信,每一行代码都是通往创新的钥匙,而分享则能让这把钥匙照亮更多人的…

STL解析——list的使用

目录 1.简介 2.构造函数 3.迭代器 3.1封装 3.2迭代器分类 4.排序性能 4.1链式与数组 4.2缓存读取 1.简介 STL容器中提供的list容器也是一种顺序容器&#xff0c;底层实现方式是带头双向链表&#xff0c;这种实现方式能比单链表更高效的访问数据。 下面围绕部分重要接口…

MQTTX连接阿里云的物联网配置

本文的目标是通过MQTTX的客户端&#xff0c;连接到阿里云的物联网的平台&#xff0c;发送温度信息&#xff0c;在阿里云的平台中显示出来。阿里云免费注册&#xff0c;免费有一个MQTT的服务器。有数量限制&#xff0c;但是对于测试来讲&#xff0c;已经足够。 1、注册阿里云的物…

20250606-C#知识:匿名函数、Lambda表达式与闭包

C#知识&#xff1a;匿名方法、Lambda表达式与闭包 闭包乍一听感觉很复杂&#xff0c;其实一点也不简单 1、匿名方法 没有方法名的方法一般用于委托和事件 Func<int, int, int> myAction delegate(int a, int b) { return a b; }; Console.WriteLine( myAction(1, 2)…

衡量嵌入向量的相似性的方法

衡量嵌入向量的相似性的方法 一、常见相似性计算方法对比 方法核心原理公式优点缺点适用场景余弦相似度计算向量夹角的余弦值,衡量方向相似性,与向量长度无关。$\text{cos}\theta = \frac{\mathbf{a} \cdot \mathbf{b}}{\mathbf{a}\mathbf{b}欧氏距离计算向量空间中的直线距离…

API是什么意思?如何实现开放API?

目录 一、API 是什么 &#xff08;一&#xff09;API 的定义 &#xff08;二&#xff09;API 的作用 二、API 的类型 &#xff08;一&#xff09;Web API 1. RESTful API 2. SOAP API &#xff08;二&#xff09;操作系统 API &#xff08;三&#xff09;数据库 API …

Python训练第四十六天

DAY 46 通道注意力(SE注意力) 知识点回顾&#xff1a; 不同CNN层的特征图&#xff1a;不同通道的特征图什么是注意力&#xff1a;注意力家族&#xff0c;类似于动物园&#xff0c;都是不同的模块&#xff0c;好不好试了才知道。通道注意力&#xff1a;模型的定义和插入的位置通…

第2天:认识LSTM

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目标 具体实现 &#xff08;一&#xff09;环境 语言环境&#xff1a;Python 3.10 编 译 器: PyCharm 框 架: pytorch &#xff08;二&#xff09;具体步骤…

自动化提示生成框架(AutoPrompt)

自动化提示生成框架(AutoPrompt) 一、核心创新点 自动化提示生成框架(AutoPrompt) 创新本质:提出基于梯度引导搜索的自动化提示生成方法,替代人工设计模板的传统模式。技术路径: 将提示视为可训练的离散token序列,通过优化提示向量(prompt embedding)搜索语义空间。利…

中国首套1公里高分辨率大气湿度指数数据集(2003~2020)

时间分辨率&#xff1a;月空间分辨率&#xff1a;100m - 1km共享方式&#xff1a;开放获取数据大小&#xff1a;34.79 GB数据时间范围&#xff1a;2003-01-01 — 2020-12-31元数据更新时间&#xff1a;2023-07-26 数据集摘要 中国首套1公里高分辨率大气湿度指数数据集&#xf…