2021-2022 ICPC, NERC, Northern Eurasia Onsite L. Labyrinth

news2024/9/23 21:29:19

翻译:

莱斯利和利昂进入了一个迷宫。迷宫由𝑛大厅和𝑚大厅之间的单向通道组成。大厅编号从1到𝑛。

莱斯利和利昂在大厅开始了他们的旅程𝑠。他们立刻争吵起来,决定各自去探索迷宫。然而,他们希望在旅程结束时再次见面。

为了帮助Leslie和Leon,你的任务是找到两条不同的路径,从给定的大厅𝑠到另一个大厅𝑡,这样这两条路径除了开始的大厅𝑠和结束的大厅𝑡之外不共用大厅。大厅𝑡还没有确定,所以你可以选择任何一个迷宫的大厅𝑡除了𝑠。

莱斯利和利昂的路不一定是最短的,但他们的路必须很简单,最多一次去任何一个大厅。此外,除了𝑠和𝑡之外,他们在旅途中不能参观任何公共大厅,即使是在不同的时间。

输入
第一行包含三个整数𝑛、𝑚𝑠,哪里𝑛(2≤𝑛≤2⋅105)是顶点的数目,𝑚(0≤𝑚≤2⋅105)是迷宫,边的数量和𝑠(1≤𝑠≤𝑛)开始大厅。

然后是𝑚带有段落描述的行。每个描述都包含两个整数𝑢𝑖,𝑣𝑖(1≤𝑢𝑖,𝑣𝑖≤𝑛;𝑢𝑖≠𝑣𝑖),表示从𝑢𝑖厅到𝑣𝑖厅的通道。这些通道是单向的。每个元组(𝑢𝑖,𝑣𝑖)在输入中最多出现一次。迷宫可以包含循环,并且不一定以任何方式连接。

输出
如果有可能找到所需的两条路径,则输出“possible”,否则输出“Impossible”。

如果答案存在,输出两个路径描述。每个描述占用两行。描述的第一行包含整数ℎ(2≤ℎ≤𝑛)—路径中的厅数,第二行包含不同的整数𝑤1,𝑤2,…,𝑤ℎ(𝑤1=𝑠;1≤𝑤𝑗≤𝑛;𝑤ℎ=𝑡)——按照经过的顺序排列在道路上的大厅。两条路径必须在同一个顶点𝑡结束。这些路径必须是不同的,这些路径中的所有中间大厅必须是不同的。

例子
inputCopy
5 5 1
1 2
2 3
1 - 4
4个3
3个5
outputCopy
可能的
3.
1 2 3
3.
1 4 3
inputCopy
5 5 1
1 2
2 3
3 4
2个5
5个4
outputCopy
不可能的
inputCopy
3 3 2
1 2
2 3
3个1
outputCopy
不可能的

思路:看有没有完全不同路径,从相同的起点出发,到一个可以到达的点。所以我们可以先看,没有解的情况,当起点只有一个点相连,这时候必不可能有解。之后我们对起点相连的点,轮流进行的方式,然后标记,如果有能搜到的点,已经被之前的搜到过了就是有解,我们用数组来记录路径,然后记录最后的两个点。然后回溯存点,输出。细节比较复杂,思路比较简单。

代码:

#include <iostream>
#include <algorithm>
#include <string.h>
#include <string>
#include <math.h>
#include <stdio.h>
#include<vector>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<tuple>
#include<numeric>
using namespace::std;
typedef long long  ll;
inline __int128 read(){
    __int128 x = 0, f = 1;
    char ch = getchar();
    while(ch < '0' || ch > '9'){
        if(ch == '-')
            f = -1;
        ch = getchar();
    }
    while(ch >= '0' && ch <= '9'){
        x = x * 10 + ch - '0';
        ch = getchar();
    }
    return x * f;
}
inline void print(__int128 x){
    if(x < 0){
        putchar('-');
        x = -x;
    }
    if(x > 9)
        print(x / 10);
    putchar(x % 10 + '0');
}
int n ,m,s;
int f,ff;
vector<int>q[200005];
int ffla[200005];
int back[200005];
bool flag=false;
int ss,ssr;
void dfs(int x,int kl){
    ffla[x]=kl;
    for (auto next:q[x]) {
        if (ffla[next]&&ffla[next]!=kl) {
            if(next!=s){
                ss=next;ssr=x;
                flag=true;
                return;
            }
        }
        if (!ffla[next]) {
            back[next]=x;
            dfs(next, kl);
            if (flag) {
                return;
            }
        }
    }
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(); cout.tie();
    cin>>n>>m>>s;
    for (int i =0; i<m; i++) {
        cin>>f>>ff;
        q[f].push_back(ff);
    }
    if (q[s].size()<2) {
        printf("Impossible\n");return 0;
    }
    int rs=1;
    ffla[s]=1e7;
    for (auto k:q[s]) {
        if (flag) {
            break;
        }
        if (ffla[k]&&k!=s) {
            
            ss=k;
            ssr=s;
            flag=1;
            break;
        }
        back[k]=s;
        ffla[k]=rs;
        dfs(k, rs);
        rs++;
    }
    if (!flag) {
        printf("Impossible\n");return 0;
    }
    printf("Possible\n");
    vector<int>an1;
    vector<int>an2;
    an2.push_back(ss);
//    printf("%d %d",ss,ssr);
    while (ss!=s) {
        an1.push_back(ss);
        ss=back[ss];
    }
    while (ssr!=s) {
        an2.push_back(ssr);
        ssr=back[ssr];
    }
    
    printf("%d\n%d ",an1.size()+1,s);
    for (int i =an1.size()-1; i>=0; i--) {
        printf("%d ",an1[i]);
    }printf("\n");
    printf("%d\n%d ",an2.size()+1,s);
    for (int i=an2.size()-1; i>=0; i--) {
        printf("%d ",an2[i]);
    }printf("\n");
    return 0;
}

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

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

相关文章

分享一个你很可能不知道的Java异常实现的缺陷

前言 Java中一个大家熟知的知识点就是异常捕获&#xff0c;try…catch…finally组合&#xff0c;但是很多人不知道这里面有一个关于Java的缺陷&#xff0c;或者说是异常实现的一点不足之处。 我这边就通过一个很简单的实验给大家演示下效果玩玩儿&#xff0c;希望大家能觉得有趣…

linux搭建测试环境(tomcat)

安装jdk 1,查看是否装的有&#xff08;centos7会自带的有&#xff09;如果是普通用户切记要切换到root 输入命令查看是否安装&#xff1a; java -version2,跟踪查看自带jdk 默认安装了openjdk&#xff0c;那就要知道具体文件安装到哪里了&#xff0c;这里我们可以通过命令“rp…

黑马程序员Java数据结构与java算法笔记(1)

数据结构和算法详细内容 来源&#xff1a;黑马程序员Java数据结构与java算法 1.数据结构和算法概述 1.1什么是数据结构&#xff1f; 数据结构就是把数据元素按照一定的关系组织起来的集合&#xff0c;用来组织和存储数据 1.2数据结构分类 传统上&#xff0c;我们可以把数…

跟我学Python图像处理丨图像分类原理与案例

摘要&#xff1a;本篇文章将分享图像分类原理&#xff0c;并介绍基于KNN、朴素贝叶斯算法的图像分类案例。本文分享自华为云社区《[Python图像处理] 二十六.图像分类原理及基于KNN、朴素贝叶斯算法的图像分类案例丨【百变AI秀】》&#xff0c;作者&#xff1a;eastmount 。 一…

5-4:发送系统通知

触发事件 评论后&#xff0c;发布通知点赞后&#xff0c;发布通知关注后&#xff0c;发布通知。 处理事件 封装事件对象开发事件的生产者开发事件的消费者 消费者线程&#xff1a;从队列里读消息&#xff0c;并做处理&#xff1b; 生产者线程&#xff1a;往线程中存入数据&…

深度神经网络是什么意思,神经网络准确度只有50

1、研究人工神经网络的权值分布有什么意义 神经网络一般都是非常庞大的&#xff0c;每个边对应一个权值&#xff0c;如果权值不共享的话&#xff0c;数据量就更大了&#xff0c;但是为了提高效率&#xff0c;引入了权值共享&#xff0c;但是还不够&#xff0c;想再次提高效率和…

五、伊森商城 前端基础-Vue Vue脚手架创建 p26

目录 一、vue 模块化开发 1、全局安装 webpack 2、全局安装 vue 脚手架vue-cli 3、初始化 vue 项目 3.1、创建文件夹 3.2、初始化vue脚手架 3.3、项目结构 4、项目启动命令 拓展&#xff1a;创建超时 一、vue 模块化开发 打开终端&#xff0c;进行命令安装 1、全局安装…

Linux网络基础(初级)

Linux网络基础 文章目录Linux网络基础1.计算机网络的发展过程1.1 独立模式1.2 网络互联模式1.3 局域网 LAN1.4 广域网 WAN2.计算机网络协议2.1 协议的概念2.2 什么是网络协议2.3 什么是网络协议簇2.4 OSI 七层模型2.5 TCP/IP 五层模型3.网络传输基本流程3.1 同局域网内的两台主…

[附源码]计算机毕业设计拉勾教育课程管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

实例解析丨一文搞定GaussDB CM服务异常

摘要&#xff1a;本文主要为大家带来如何处理GaussDB CM服务异常问题。本文分享自华为云社区《【实例状态】GaussDB CM服务异常》&#xff0c;作者&#xff1a;酷哥。 首先确认是否是虚拟机、网络故障&#xff0c;底层故障处理 PID文件未清理导致进程启动失败 问题现象 收到…

FS2115D SOT23-6 低噪声3.3V升压IC电荷泵 DC/DC 转换器

概述 FS2115D 是一款低噪声、恒定频率 &#xff08;1.2MHz&#xff09; 开关电容倍压器。它从 1.8V 至 5V 输入产生一个稳定的输出电压&#xff0c;输出电流高达 150mA。FS2115D 的外部元件数量少&#xff08;VIN 和 VOUT 处有一个跨接电容器和两个小型旁路电容器&#xff09;…

程序员看世界杯

目录 1、世界杯赛事规则 1.1、赛制 1.2、小组赛 1.3、淘汰赛阶段 1.4、1/8决赛 1.5、半决赛 1.6、决赛 2、大力神杯材质 3、看球心德 4、2022大力神杯赢家 1、世界杯赛事规则 1.1、赛制 世界杯一共进行64场&#xff0c;其中分小组赛48场&#xff0c;1/8决赛8场&am…

Sentinel--服务容错

目录一、高并发带来的问题二、服务雪崩效应三、常见容错方案四、Sentinel入门什么是Sentinel安装Sentinel控制台实现一个接口的限流五、Sentinel的概念和功能基本概念重要功能六、Sentinel规则流控规则简单配置配置流控模式配置流控效果降级规则热点规则授权规则系统规则自定义…

行为管理(锐捷行业网关篇)

大家好&#xff0c;我是小杜。有了自学习和师傅指导这个“buff”&#xff0c;感觉自己的进步是“一日千里”啊&#xff01; 今天来学习网关产品的行为管理相关的配置&#xff0c;咦&#xff0c;网关EG系列和睿易的NBR-E系列的路由器差不多啊&#xff0c;难道是“双胞胎”&#…

安卓app源码和设计报告——简易记账本

课 程 设 计&#xff08;实训&#xff09;说 明 书 题目实现简易记账本功能 专 业班 级学生姓名同组学生指导老师课程设计&#xff08;实训&#xff09;评语 学生姓名 专业 班级 2 题目 实现简易记账本功能 评语&#xff1a; 成绩&#xff1a; 优良中及格不及格出勤20%实…

ArrayList、LinkedList、HashMap

ArrayList 特点&#xff1a;元素有放入顺序&#xff0c;元素可重复 存储结构&#xff1a;底层采用数组来实现的,数组在内存中是需要连续的存储单元的 public class ArrayList<E> extends AbstractList<E>implements List<E>, RandomAccess, Cloneable, ja…

计数问题

目录 B.计数问题 思路: 代码: 时间复杂度: 总结: 题目链接: B.计数问题 时间&#xff1a;1s 空间&#xff1a;128M 题目描述&#xff1a; 计算在区间 1 到 n 的所有整数中&#xff0c;数字 x(0 ≤ x ≤ 9)共出现了多少次&#xff1f;例如&#xff0c;在 1到 11中&…

阿里P9大牛整理总结出进阶架构师必备知识:NginxLua开发实战文档

前言 有人调侃我们说&#xff1a; 程序员不如送外卖。送外卖是搬运食物&#xff0c;自己是搬运代码&#xff0c;都不产出新的东西……透支体力&#xff0c;又消耗健康&#xff0c;可替代性极强&#xff0c;30岁之后就要面临被优化的危险……想跳槽&#xff0c;但是更高的平台…

基于遗传算法和非线性规划的函数寻优算法(Matlab代码实现)

目录 1 概述 1.1简介 1.2 遗传算法及其基本步骤 2 部分运行结果 3 Matlab代码实现 4 参考文献 1 概述 1.1简介 现实生活中很多科学计算和工程问题都可以通过建模转化成求函数的优化问题&#xff0c;并求出函数模型在可行域内的最优解&#xff0c;给决策者提供参考。非线…

【AI学习笔记】Error: ffmpeg error (see stderr output for detail)

报错&#xff1a; 原因&#xff1a; 我询问了一下大佬&#xff0c;大佬说让我调试一下ffmpeg库&#xff0c;看本地能不能用&#xff0c;然后又结合了我查看的一些博文及本地环境&#xff0c;推论出我很可能没有配置环境。 由于我conda一个环境&#xff0c;本地一个python3.9环…