OJ_这是一颗树吗

news2025/1/18 11:07:55

题干

在这里插入图片描述
在这里插入图片描述

C++实现

树结构需要满足的三个条件

  • 不存在入度大于2的结点
  • 已连通的u,v,再加入一条新边就会成环
  • 边数 = 顶点数-1
#include <iostream>
#include <vector>
using namespace std;

//并查集的应用:判断图的连通性

int set[10001];
//i下标是集合数据编号,set[i]是i的父亲的编号
//若i是根,可令set[i] = i
void InitDisjointSet(int n) {
    for(int i = 0; i<n; ++i) {
        set[i] = i;
    }
}

int FindDisjointSet(int u) {
    if(u == set[u]) {
        return u;
    } else {
        set[u] = FindDisjointSet(set[u]);//压缩路径
        return set[u];
    }
}

int UnionDisjointSet(int u,int v) {
    int uRoot = FindDisjointSet(u);
    int vRoot = FindDisjointSet(v);
    //把v并到u上
    set[vRoot] = uRoot;
}

int main() {
    int u,v;
    InitDisjointSet(10001);
    int edgeCount = 0;
    int vertexCount = 0;
    //vertex[i] = 0说明i未出现过
    vector<int> vertex(10001);
    //inDegree[i]记录i的入度
    vector<int> inDegree(10001);
    //判断是否是棵树
    bool isOK = true;
    int caseIndex = 1;
    while(1) {
        scanf("%d%d",&u,&v);
        if(u == -1&&v==-1) {
            break;
        } else if(u == 0 && v==0) {
            //一个图的所有边已经记录完成了
            if(vertexCount!=edgeCount+1) {
                isOK =false;//有特例:空树
            }
            if(vertexCount == 0 &&edgeCount ==0) {
                isOK = true;
            }

            if(isOK) {
                printf("Case %d is a tree.\n",caseIndex);
            } else {
                printf("Case %d is not a tree.\n",caseIndex);
            }

            InitDisjointSet(10001);
            edgeCount = 0;
            vertexCount = 0;
            for(int i = 0; i<10001; ++i) {
                vertex[i] = 0;
                inDegree[i] = 0;
            }
            isOK = true;
            ++caseIndex;
        } else {
            //往当前图加入新边
            ++edgeCount;
            if(vertex[u] == 0) {
                vertex[u] = 1;
                ++vertexCount;
            }
            if(vertex[v] == 0) {
                vertex[v] = 1;
                ++vertexCount;
            }
            if(FindDisjointSet(u) == FindDisjointSet(v)) {
                //说明成环了
                isOK = false;
            } else {
                UnionDisjointSet(u,v);
            }
        }
        ++inDegree[v];
        if(inDegree[v]>=2) {
            isOK = false;
        }
    }
}

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

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

相关文章

最迟但到的 Star History 2023 年度开源精选!

千呼万唤始出来&#xff0c;Star History 2023 年终开源精选来啦&#xff01;&#x1f389; AI 是 2023 开源领域里最主要的关键词&#xff0c;但其实过去一年还是有很多其他值得关注的项目和发展趋势的&#xff01;Star History 小编总结了几个类别并精选了类别中最亮眼的项目…

Java基于微信小程序的校园订餐小程序的研究与实现,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

MySQL一些命令记录

查看数据引擎 show engines;创建数据库,并选择库 CREATE DATABASE IF NOT EXISTS test_database; USE test_database;创建表 CREATE TABLE IF NOT EXISTS test_table (id INT AUTO_INCREMENT PRIMARY KEY,field1 VARCHAR(50),field2 VARCHAR(50),field3 VARCHAR(50),field4 …

为什么猫咪生骨肉冻干价格相差那么大?五款比较好的猫生骨肉冻干牌子推荐

随着养猫知识的普及&#xff0c;生骨肉冻干喂养受到越来越多铲屎官的欢迎。然而&#xff0c;价格因素让部分铲屎官止步。事实上&#xff0c;资深铲屎官如我&#xff0c;早已认识到生骨肉冻干的价值。虽然价格稍高&#xff0c;但其为猫咪带来的实际好处是远超其价格的。 对于像我…

Python处理大型(>1GB)CSV文件的正确姿势

Python大型CSV文件处理 1、背景描述2、大型CSV文件处理方式 1、背景描述 Pandas在读取大型文件时&#xff0c;通常会遇到内存不足的问题。例如&#xff0c;在某次处理大于1GB的CSV文件时&#xff0c;出现了如下错误&#xff1a; 那么&#xff0c;针对这种情况&#xff0c;我们应…

fs模块 练习题

编写程序&#xff1a; 在文件夹data里有文件a.txt和文件b.txt。将文件a.txt和文件b.txt的内容读取后写入文件c.txt中。 一、同步读取 const fs require(fs); let datas1fs.readFileSync(./data/a.txt); let datas2fs.readFileSync(./data/b.txt); let datas3datas1datas2;//对…

AQY214S固态继电器:用于控制各种应用中的模拟信号的紧凑解决方案

AQY214S是一款多功能固态继电器&#xff0c;是一款经过精心设计的精致固态继电器&#xff0c;可在多种应用中与低电平模拟信号共舞。在这次探索中&#xff0c;我们将揭开AQY214S的复杂性&#xff0c;重点介绍其独特的功能&#xff0c;并深入研究其在不同行业中的应用的迷人挂毯…

损失函数和反向传播

1. 损失函数的基础 import torch from torch.nn import L1Loss from torch import nninputs torch.tensor([1, 2, 3], dtypetorch.float32) targets torch.tensor([1, 2, 5], dtypetorch.float32)inputs torch.reshape(inputs, (1, 1, 1, 3)) targets torch.reshape(targe…

【Lidar】Lidar激光雷达一篇全(两万字激光雷达详细介绍)

【Lidar】Lidar激光雷达一篇全 1. 激光雷达测距原理1.1 三角测距1.2 飞行时间测距&#xff08;TOF&#xff0c;Time of Flight&#xff09; 2. 车载激光雷达类别2.1 机械旋转式2.2 固态2.2.1 相控阵 2.3 半固态&#xff08;混合固态&#xff09;2.3.2 微转镜/棱镜 3. 激光雷达性…

gitlab仓库使用流程(开发)

1.1.GitLab代码提交流程&#xff1a; 1.1.1准备阶段&#xff1a; 确保已经安装了Git&#xff0c;并且配置了正确的用户名和邮箱地址。 在本地创建一个新的文件夹&#xff0c;用于存放即将开发的代码。 1.1.2.拉取代码&#xff1a; 使用git clone命令从GitLab上拉取项目代码…

XUbuntu22.04之关闭todesk开机自启动(二百二十一)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

【Session】Tomcat Session 集群

设备 nginx&#xff1a;192.168.67.11 tomcat1&#xff1a;192.168.67.12 tomcat2&#xff1a;192.168.67.13安装nginx &#xff08;192.168.67.11&#xff09; #关闭防火墙和安全机制 [roottest1 ~]# systemctl stop firewalld [roottest1 ~]# setenforce 0#安装epel源 [ro…

还在用ifelse来写业务?了解下Spring状态机

状态机之所以强大&#xff0c;是因为其行为在启动时就以固定的方式定义了操作规则&#xff0c;从而确保了一贯的连贯性和相对较高的可调试性。关键在于&#xff0c;应用程序处于且仅可能处于有限数量的状态中。然后&#xff0c;某些事件发生会使得应用从一个状态过渡到另一个状…

RuoYi-Vue使用RestTemplate无法通过@Autowired注入报错

A component required a bean of type org.springframework.web.client.RestTemplate that could not be found. 解决方法&#xff1a; 将ruoyi-framework模块下找到ApplicationConfig这个配置类使用Bean注入&#xff1a; /*** RestTemplate配置*/Beanpublic RestTemplate r…

基于数据库的全文检索实现

对于内容摘要&#xff0c;信件内容进行全文检索 基于SpringBoot 2.5.6Postgresqljpahibernate实现 依赖 <spring-boot.version>2.5.6</spring-boot.version> <hibernate-types-52.version>2.14.0</hibernate-types-52.version><dependency><…

Chrome浏览器滚动条样式优化

针对Chrome浏览器&#xff0c;可以全局设置滚动条样式&#xff0c;让你的项目更美观 ::-webkit-scrollbar-track-piece {background-color: transparent; } ::-webkit-scrollbar {width: 7px;height: 7px;background-color: transparent; }::-webkit-scrollbar-thumb {border-…

ctfshow(WEB AK赛)

目录 web-观己 web1-观字 web2-观星 web3-观图 web4-观心 过程and分析 web-观己 没啥难的有include 想着伪协议 但是过滤了php 那就是用file为协议读取本地文件 全靠猜 <?php if(isset($_GET[file])){$file $_GET[file];if(preg_match(/php/i, $file)){die(error);}…

【深度学习笔记】9_5 多尺度目标检测

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;部分标注了个人理解&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 9.5 多尺度目标检测 在9.4节&#xff08;锚框&#xff09;中&#xff0c;我们在实验中以输入图像的每个像素为中心生成多个锚框。这些…

opencv中的图像高斯双边模糊—bilateralFilter函数

高斯双边滤波&#xff08;Bilateral Filtering&#xff09;是一种非线性的滤波方法&#xff0c;用于平滑图像&#xff0c;同时保留边缘。与传统的高斯模糊不同&#xff0c;双边滤波在平滑图像的同时&#xff0c;能够避免模糊边缘。这是通过考虑像素值的差异来实现的&#xff1a…

把 Windows 装进 Docker 容器里

本篇文章聊聊如何在 Docker 里运行 Windows 操作系统&#xff0c; Windows in Docker Container&#xff08;WinD&#xff09;。 写在前面 我日常使用 macOS 和 Ubuntu 来学习和工作&#xff0c;但是时不时会有 Windows 使用的场景&#xff0c;不论是运行某个指定的软件&…