洛谷 P1347 排序(福建省历届夏令营)(图论:拓扑排序)
题目描述
一个不同的值的升序排序数列指的是一个从左到右元素依次增大的序列,例如,一个有序的数列 A,B,C,D表示 A<B,B<C,C<D。在这道题中,我们将给你一系列形如 A<B的关系,并要求你判断是否能够根据这些关系确定这个数列的顺序。
输入格式
第一行有两个正整数 n,m 表示需要排序的元素数量,2≤n≤26,第 1 到 n 个元素将用大写的 A,B,C,D,…A,B,C,D,… 表示。m 表示将给出的形如 A<B 的关系的数量。
接下来有 m 行,每行有 3 个字符,分别为一个大写字母,一个 < 符号,一个大写字母,表示两个元素之间的关系。
输出格式
若根据前 x 个关系即可确定这 n 个元素的顺序 yyy..y(如 ABC),输出
Sorted sequence determined after xxx relations: yyy...y.
若根据前 x 个关系即发现存在矛盾(如 A<B,B<C,C<A),输出
Inconsistency found after x relations.
若根据这 m 个关系无法确定这 n 个元素的顺序,输出
Sorted sequence cannot be determined.
(提示:确定 n 个元素的顺序后即可结束程序,可以不用考虑确定顺序之后出现矛盾的情况)
输入输出样例
输入 #1复制
4 6 A<B A<C B<C C<D B<D A<B
输出 #1复制
Sorted sequence determined after 4 relations: ABCD.
输入 #2复制
3 2 A<B B<A
输出 #2复制
Inconsistency found after 2 relations.
输入 #3复制
26 1 A<Z
输出 #3复制
Sorted sequence cannot be determined.
说明/提示
2≤n≤26,1≤m≤600。
这道题考察的是拓扑排序,AcWing 1191. 家谱树(图论,拓扑排序的模板)-CSDN博客 模板在这
我们简单讲讲思路,我们把输出分成三种形式(题目描述先后对应1、2、3),第1种是可以判断得出完整拓扑排序的情况,第2种是有环的情况,第3种就是这两个之外直接输出
第2种:首先判断是否形成环了,做法:记录出现的字母个数,如果最后得到的拓扑序列的大小 小于字母个数,那么就是形成环了
第1种:必须严格的得出所有字母之间的关系,也就是说记录出现字母的个数必须等于拓扑序列的大小而且队列的大小要保持为1,如果超过1了说明有不确定的关系
代码:
#include <bits/stdc++.h>
using namespace std;const int N = 30;
int ind[N],oud[N],cpy[N];
vector<int> e[N];
bool b[N];int n,m,cnt = 0,type = 0;void topsort(int idx){memcpy(ind,cpy,sizeof(cpy));queue<int> q;string ans = "";bool ac = true;for(int i=1;i<=n;i++){if(!b[i]) continue;if(!ind[i]) q.push(i);}while(!q.empty()){if(q.size() >= 2) ac = false;int u = q.front();q.pop();ans += char(u) + 64;for(auto v : e[u]){ind[v] --;if(!ind[v]) q.push(v);}}// if(idx == 28) cout << ans << " " << ans.size() << " " << cnt << endl;if(ans.size() < cnt){// cout << ans.size() << " " << cnt << endl;type = 2;printf("Inconsistency found after %d relations.\n",idx);}if(ans.size() == n && ac){type = 1;printf("Sorted sequence determined after %d relations: ",idx);cout << ans << "." << endl;}
}int main()
{cin >> n >> m;string s;for(int i=1;i<=m;i++){cin >> s;if(type) continue;int A = s[0] - 64,B = s[2] - 64;// cout << A << " " << B << endl;if(!b[A]){b[A] = true;cnt ++;}if(!b[B]){b[B] = true;cnt ++;}if(s[1] == '<'){cpy[B] ++,oud[A] ++;e[A].push_back(B);}else{cpy[A] ++,oud[B] ++;e[B].push_back(A);}topsort(i);}if(!type) cout << "Sorted sequence cannot be determined." << endl;return 0;
}
加油
相关文章:
洛谷 P1347 排序(福建省历届夏令营)(图论:拓扑排序)
题目描述 一个不同的值的升序排序数列指的是一个从左到右元素依次增大的序列,例如,一个有序的数列 A,B,C,D表示 A<B,B<C,C<D。在这道题中,我们将给你一系列形如 A<B的关系,并要求你判断是否能够根据这些关系确定这个…...
Redis 缓存击穿、穿透、雪崩
1. 缓存击穿 问题描述: 缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又都去数据库去取数据,引起数据库压力瞬间增大…...
使用开源RustDesk部署远程控制服务
使用开源RustDesk部署远程控制服务 文档编写时间:2024/8/1 一、部署环境 操作系统:Ubuntu 2204 LTS IP地址:192.168.108.115 开源软件项目地址:rustdesk/rustdesk-server: RustDesk Server Program (github.com) 参考文档&a…...
Coco-LIC基于ubuntu的vscode进行断点调试
1、下vscode和插件 参考这个也行 https://zhuanlan.zhihu.com/p/704522656 2、编译debug版本并修改json 要在 Visual Studio Code (VSCode) 中进行断点调试 ROS 任务,你需要进行以下几个步骤: ### 1. 安装所需插件 - **C/C 插件**: 提供对 C 代码的调试…...
【Web】从TFCCTF-FUNNY浅析PHPCGI命令行注入漏洞利用
目录 背景 CVE-2012-1823 发散利用 法一:读文件 法二:数据外带 背景 CVE-2012-1823 PHP-CGI远程代码执行漏洞(CVE-2012-1823)分析 | 离别歌 省流: 命令行参数不光可以通过#!/usr/local/bin/php-cgi -d include…...
对比一下在 OpenCV 和 AE 中如何实现常用效果 [精]
确实,Adobe After Effects (AE) 也是一个功能强大的工具,特别擅长处理图像和视频的视觉效果和动画。很多在 OpenCV 中实现的图像处理和增强效果,AE 也可以轻松完成,甚至以更加直观的方式实现。下面对比一下在 OpenCV 和 AE 中如何…...
docker安装及使用
一、docker优点及作用 优点: 基础镜像MB级别创建简单隔离性强启动速度秒级移植与分享放便 作用:资源隔离 cpu、memory资源隔离与限制访问设备隔离与限制网络隔离与限制用户、用户组隔离限制 二、docker安装 2.1.配置yum源 yum install -y yum-uti…...
HTML前端面试基础(一)
HTML面试题可以涵盖多个方面,包括HTML基础、HTML5新特性、标签语义化、元素分类、属性理解等。以下是一些常见的HTML面试题及其简要答案: 1. HTML基础 问题: 请解释一下HTML文档的基本结构。 答案: HTML文档的基本结构包括<…...
[Git][多人协作][下]详细讲解
目录 1.不同分支下多人协作2.远程分⽀删除后,本地git branch -a依然能看到 1.不同分支下多人协作 ⼀般情况下,如果有多需求需要多⼈同时进⾏开发,是不会在⼀个分⽀上进⾏多⼈开发,⽽是⼀个需求或⼀个功能点就要创建⼀个feature分…...
MySQL笔记(七):索引
一、索引优化速度 创建对应字段的索引,只对该列有效,只能提高该列的查询速度 创建索引后,查询速度变快,但是表占用空间变大 create index 索引名 on 表名(需要创建索引的列)二、索引的原理 普通索引允许该字段重复 全文索引&#…...
JS 原型和原型链
构造函数 封装是面向对象思想中比较重要的一部分,js 面向对象可以通过构造函数实现的封装。 同样的将变量和函数组合到了一起并能通过 this 实现数据的共享,所不同的是 JS 借助构造函数创建出来的实例对象之间是彼此不影响的 存在浪费内存的问题&#…...
【无标题】图像增强技术:直方图均衡化、拉普拉斯算子、对数变换与伽马变换
图像增强技术:直方图均衡化、拉普拉斯算子、对数变换与伽马变换 在图像处理领域,图像增强是一种关键技术,用于提升图像的视觉效果和质量。本文将介绍四种常用的图像增强方法:直方图均衡化、拉普拉斯算子、对数变换和伽马变换。我…...
自动化专业英语
前言 电子信息、电气工程、自动化专业英语词汇汇总,不定期更新 常用 Asynchronous:异步synchronous:同步notification:通知blade:平面shaft:轴magnetic:磁场的bearing:轴承valve&…...
如何使用 Python 进行数据可视化,比如绘制折线图?
要使用Python进行数据可视化,可以使用matplotlib库来绘制折线图。以下是一个简单的示例代码: 首先,确保已安装matplotlib库。可以使用以下命令安装: pip install matplotlib在Python脚本中导入matplotlib库: import…...
PostgreSQL数据库的事务ID和事务机制
PostgreSQL后续简称PG。PG只读事务不会分配事务ID。为了在共享锁等情况下对事务进行标识,需要一种非持久化的事务ID,即虚拟事务ID,vxid。虚拟事务ID不需要把事务ID持久化到磁盘。因为事务ID是很宝贵的资源,简单的select语句不会申…...
LeetCode 热题 HOT 100 (020/100)【宇宙最简单版】[创作中]
【链表】No. 0142 环形链表 II【中等】👉力扣对应题目指路 希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦 欢迎关注、订阅专栏 【力扣详解】谢谢你的支持&#…...
XML动态sql查询当前时间之前的信息报错
如图,sql语句在数据库里可以正常运行但是再XML文件不可以正常运行,报错。 原因:在XML中小于号"<"是会被默认认定成文一个标签的开始,所以用小于号就会报错。 解决办法: 1.把表达式反过来改成大于号 2…...
EMQX服务器安装MQTT测试
cd /usr/local/develop wget https://www.emqx.com/en/downloads/broker/5.7.1/emqx-5.7.1-el7-amd64.tar.gz mkdir -p emqx && tar -zxvf emqx-5.7.1-el7-amd64.tar.gz -C emqx ./emqx/bin/emqx start 重启 ./emqx/bin/emqx restart http://10.8.0.1:18083/ 账号ad…...
3. 无重复字符的最长子串(滑动窗口)
目录 :题目: 二:代码: 三:结果: 一:题目: 给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。 二:代码: class Solution { …...
用javaagent和javassist实现Arthas的watch功能
一、被监控的服务 spring-boot-demo 1、 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&q…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...
【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...
针对药品仓库的效期管理问题,如何利用WMS系统“破局”
案例: 某医药分销企业,主要经营各类药品的批发与零售。由于药品的特殊性,效期管理至关重要,但该企业一直面临效期问题的困扰。在未使用WMS系统之前,其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...
字符串哈希+KMP
P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...
【笔记】AI Agent 项目 SUNA 部署 之 Docker 构建记录
#工作记录 构建过程记录 Microsoft Windows [Version 10.0.27871.1000] (c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py --admin███████╗██╗ ██╗███╗ ██╗ █████╗ ██╔════╝…...
SpringBoot离线应用的5种实现方式
在当今高度依赖网络的环境中,离线应用的价值日益凸显。无论是在网络不稳定的区域运行的现场系统,还是需要在断网环境下使用的企业内部应用,具备离线工作能力已成为许多应用的必备特性。 本文将介绍基于SpringBoot实现离线应用的5种不同方式。…...
