#P0761. [NOIP2012普及组] 文化之旅

news2024/12/27 11:53:21

题目描述

有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家)。不同的国家可能有相同的文化。不同文化的国家对其他文化的看法不同,有些文化会排斥外来文化(即如果他学习了某种文化,则他不能到达排斥这种文化的其他国家)。

现给定各个国家间的地理关系,各个国家的文化,每种文化对其他文化的看法,以及这位使者游历的起点和终点(在起点和终点也会学习当地的文化),国家间的道路距离,试求从起点到终点最少需走多少路。

输入格式

第一行为五个整数 N,K,M,S,TN,K,M,S,T,每两个整数之间用一个空格隔开,依次代表国家个数(国家编号为11 到 NN),文化种数(文化编号为 11 到 KK),道路的条数,以及起点和终点的编号(保证 SS 不等于 TT);

第二行为 NN个整数,每两个整数之间用一个空格隔开,其中第 ii个数 C_iCi​,表示国家 ii的文化为 C_iCi​。

接下来的 KK行,每行 KK 个整数,每两个整数之间用一个空格隔开,记第ii 行的第 j 个数为 a_{ij}aij​,a_{ij}= 1aij​=1 表示文化 ii 排斥外来文化jj(ii 等于 jj 时表示排斥相同文化的外来人),a_{ij}= 0aij​=0 表示不排斥(注意 ii 排斥 jj 并不保证 jj 一定也排斥 ii)。

接下来的 MM 行,每行三个整数 u,v,du,v,d,每两个整数之间用一个空格隔开,表示国家 uu与国家 vv有一条距离为dd的可双向通行的道路(保证uu不等于 vv,两个国家之间可能有多条道路)。

输出格式

一个整数,表示使者从起点国家到达终点国家最少需要走的距离数(如果无解则输出-1−1)。

输入数据 1

2 2 1 1 2 
1 2 
0 1 
1 0 
1 2 10

Copy

输出数据 1

-1

Copy

输入数据 2

2 2 1 1 2 
1 2 
0 1 
0 0 
1 2 10

Copy

输出数据 2

10

Copy

提示

输入输出样例说明11

由于到国家 22 必须要经过国家11,而国家22的文明却排斥国家 11 的文明,所以不可能到达国家 22。

输入输出样例说明22

路线为11 ->22

【数据范围】

对于 100%的数据,有2≤N≤1002≤N≤100

1≤K≤1001≤K≤100

1≤M≤N^21≤M≤N2

1≤k_i≤K1≤ki​≤K

1≤u, v≤N1≤u,v≤N

1≤d≤1000,S≠T,1≤S,T≤N1≤d≤1000,S=T,1≤S,T≤N

NOIP 2012 普及组 第四题

代码:

#include <cstdio>
#include <cstring>
int n,k,m,s,t,country[105],first[20005],next[20005],v[20005],w[20005];
int wh[105][105],cnt,head,tail,q[100005],dis[105];
int q1[100005][105];
using namespace std;
inline int read()
{
    int f=1,x=0;
    char ch=getchar();
    if (ch=='-')
    {
        f=-1;
        ch=getchar();
    }
    while ((ch<'0')||(ch>'9')) ch=getchar();
    while ((ch>='0')&&(ch<='9'))
    {
        x=x*10+ch-48;
        ch=getchar();
    }
    return f*x;
}
inline void spfa(int s)
{
    memset(dis,0x3f3f3f3f,sizeof(dis));//dis数组记录的是s点到所有点的距离 
    dis[s]=0;
    head=0;
    tail=1;
    q[1]=s;
    q1[1][0]=1;//q1[i][0]记录的是知道了多少种文化 
    q1[1][1]=country[s];
    while (head<tail)
    {
        head=head%100000+1; 
        for (int i=first[q[head]];i;i=next[i])
        {
            int k=v[i];//k为目标点 
            bool bo=0;
            for (int j=1;j<=q1[head][0];j++)//判断目标点可否到达 
              if (wh[country[k]][q1[head][j]]||(country[k]==q1[head][j]))
              {
              	bo=1;
              	break;
              }
            if (bo) continue;//不可到达,则跳过 
            if (dis[q[head]]+w[i]<dis[k])//如果可以使距离变短的话,就加入 
            {
                dis[k]=dis[q[head]]+w[i];
                tail=tail%100000+1;
                q[tail]=k;
                q1[tail][0]=q1[head][0]+1;
                for (int j=1;j<=q1[head][0];j++)
                  q1[tail][j]=q1[head][j];
                q1[tail][q1[tail][0]]=country[k];
            }
        }
    }//下面判断输出 
    if (dis[t]==0x3f3f3f3f)
    {
        printf("-1\n");
        return;
    } else
    {
        printf("%d\n",dis[t]);
        return;
    }
}
int main()
{
    n=read(),k=read(),m=read(),s=read(),t=read();
    for (int i=1;i<=n;i++) country[i]=read();
    for (int i=1;i<=k;i++)
      for (int j=1;j<=k;j++) wh[i][j]=read();
    for (int i=1;i<=m;i++)
    {
        int x,y,z;
        x=read(),y=read(),z=read();
        next[++cnt]=first[x];
        first[x]=cnt;
        v[cnt]=y;
        w[cnt]=z;
        next[++cnt]=first[y];
        first[y]=cnt;
        v[cnt]=x;
        w[cnt]=z;
    }
    spfa(s);
    return 0;
}

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

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

相关文章

【LeetCode】地下城游戏(动态规划)

地下城游戏 题目描述算法分析编程代码 链接: 地下城游戏 题目描述 算法分析 编程代码 class Solution { public:int calculateMinimumHP(vector<vector<int>>& dungeon) {int m dungeon.size();int n dungeon[0].size();vector<vector<int>> d…

Flutter 文件上传(七牛云)简单封装

前言&#xff1a;记录了七牛云上传图片的简单封装、若有不足 欢迎指正。 开始前准备&#xff1a; A、七牛sdk版本一定要和dart版本相对应&#xff08;推荐用any方式、让其自己去匹配&#xff09;&#xff1b; qiniu_flutter_sdk: any B、七牛上传文件所需的参数&#xff1a; …

谈谈python编程语言

目录 1.什么是python 2.python的发展历史 3.python的具体应用领域 4.就业前景 1.什么是python Python是一种高级编程语言&#xff0c;它具有简单易学、可读性强和功能丰富的特点。Python由Guido van Rossum于1991年开发&#xff0c;并成为一种通用的编程语言。 以下是一些Py…

蓝队的自我修养之如何从流量中检测 WebShell

HW期间&#xff0c;为防范钓鱼&#xff0c;即日起FreeBuf将取消投稿文章的一切外部链接。给您带来的不便&#xff0c;敬请谅解~ 背景 众所周知&#xff0c;攻防演练过程中&#xff0c;攻击队入侵企业网站时&#xff0c;通常要通过各种方式获取 webshell&#xff0c;从而获得企…

unity TextMeshPro 富文本

<b>粗体标签</b> <i>斜体标签</i> <u>下划线标签</u> <s>删除线标签</s> <sup>上标标签</sup>前面后边上标签 5<sup>。</sup>C <sub>下标标签&#xff0c;如&#xff1a;</sub>H<sub&…

JS进阶-Day2

&#x1f954;&#xff1a;万物皆有裂痕&#xff0c;那是光照进来的地方 JS进阶-Day1——点击此处&#xff08;作用域、函数、解构赋值等&#xff09; JS 进阶 - Day2 深入对象构造函数&#xff08;⭐&#xff09;面试小题&#xff1a; 实例成员静态成员&#xff08;⭐&#xf…

微信小程序nodejs+vue+uniapp高校食堂线上预约点餐系统

本次设计任务是要设计一个食堂线上预约点餐系统&#xff0c;通过这个系统能够满足管理员及学生的食堂线上预约点餐分享功能。系统的主要包括首页、个人中心、学生管理、菜品分类管理、菜品管理、关于我们管理、意见反馈、系统管理、订单管理等功能。 开发语言 node.js 框架&am…

【Opencv入门到项目实战】(二):图像阈值与平滑处理

文章目录 1.图像阈值处理1.1简单阈值处理&#xff08;Simple Thresholding&#xff09;1.2自适应阈值处理&#xff08;Adaptive Thresholding&#xff09;1.3Otsus阈值处理 2.平滑处理1.1均值滤波&#xff08;Mean Filter&#xff09;1.2高斯滤波&#xff08;Gaussian Filter&a…

FPGA纯verilog实现Gzip数据压缩deflate算法,提供工程源码和技术支持

目录 1、前言2、我这儿已有的FPGA压缩算法方案3、FPGA Gzip数据压缩功能和性能4、FPGA Gzip数据压缩设计方案输入输出接口描述数据处理流程LZ77压缩器哈夫曼编码输出缓存 数据输出说明特殊说明 5、vivado仿真6、vivado工程7、上板调试验证FPGA开发板测试本zip算法对比于评估 8、…

【JDK版本差异】Optional.requireNonNullElseGet在JAVA8中的替代表述

Objects.requireNonNullElseGet 是 Java 9 引入的方法&#xff0c;不在 Java 8 中可用。但是&#xff0c; 可以使用 Java 8 的一些功能来模拟类似的效果。 快速查阅 JDK9以上表述&#xff1a; this.principalFactory Objects.requireNonNullElseGet(principalFactory, Defau…

如何测出 Scratch 的指令反应时间

相信看了标题&#xff0c;你一定会很吃惊&#xff0c;你会觉得scratch不是没有反应时间吗&#xff1f; 但其实不是&#xff0c;这也是我偶然间发现的&#xff0c;这期的内容较少&#xff0c;对你的技术涨幅很小&#xff0c;但可以当作娱乐来看 其实就7个代码&#xff0c;但看着…

(自控原理)线性系统的时域分析法

目录 一、系统时间响应的性能指标 1、典型输入信号 2、动态性能与稳态性能 二、一阶系统的时域分析 1、一阶系统的数学模型 2、一阶系统的单位阶跃响应 三、二阶系统的时域分析 1、二阶系统的数学模型 2、二阶系统的单位阶跃响应 3、欠阻尼二阶系统的动态过程分析 4…

redis原理 5:同舟共济 —— 事务

为了确保连续多个操作的原子性&#xff0c;一个成熟的数据库通常都会有事务支持&#xff0c;Redis 也不例外。Redis 的事务使用非常简单&#xff0c;不同于关系数据库&#xff0c;我们无须理解那么多复杂的事务模型&#xff0c;就可以直接使用。不过也正是因为这种简单性&#…

国内版ChatGPT平替

想体验的朋友可以去微信搜索小程序 “ robot buddy ”

2024年杭州电子科技大学MEM项目招生信息全面了解

2024年全国管理类硕士联考备考已经到了最火热的阶段&#xff0c;不少考生开始持续将注意力集中在备考的规划中&#xff01;杭州达立易考教育整合浙江省内的MEM目信息&#xff0c;为大家详细梳理了相关报考参考内容&#xff0c;方便大家更好完成择校以及针对性的备考工作。本期为…

【Spring Boot】Thymeleaf模板引擎 — Thymeleaf表达式

Thymeleaf表达式 本节介绍Thymeleaf的各种表达式&#xff0c;通过一些简单的例子来演示Thymeleaf的表达式及用法。 1.变量表达式 变量表达式即获取后台变量的表达式。使用${}获取变量的值&#xff0c;例如&#xff1a; <p th:text"${name}">hello</p>…

Windows Server 2012 R2 安装 Oracle RAC 11g R2

Windows Server 2012 R2 安装 Oracle RAC 11g R2 环境准备安装系统设置虚拟网络配置虚拟机网卡开机进行系统配置关闭防火墙设置网络系统高级设置修改注册表修改计算机名称设置账户控制RAC1 和 RAC2 的磁盘共享修改 hosts同步时间在 RAC1 RAC2 DATA 中安装 .net3.5在 DATA 中搭建…

windows下redis的下载和安装

文章目录 1 下载2 打开解压文件&#xff0c;可以看到以下内容3 使用命令进行安装和注册redis到window服务4 查看服务 1 下载 https://github.com/MicrosoftArchive/redis/releases 2 打开解压文件&#xff0c;可以看到以下内容 3 使用命令进行安装和注册redis到window服务 …

一文学透设计模式——抽象工厂模式

创建者模式 抽象工厂模式 概念 抽象工厂模式是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式。 这是很多地方对于抽象工厂模式的描述&#xff0c;说实话感觉不是特别好懂。…

ResNet-残差网络一

文章目录 残差网络深度网络退化残差结构残差网络对比测试plain net VS residual net不同的shrotcut connection残差网络增加层数 著名的残差网络主要是在两片论文里提出&#xff1a; Deep Residual Learning for Image RecognitionIdentity Mappings in Deep Residual Networks…