P1078 文化之旅
P1078 文化之旅
题目描述
有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一
种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家)。不
同的国家可能有相同的文化。不同文化的国家对其他文化的看法不同,有些文化会排斥外来
文化(即如果他学习了某种文化,则他不能到达排斥这种文化的其他国家)。
现给定各个国家间的地理关系,各个国家的文化,每种文化对其他文化的看法,以及这
位使者游历的起点和终点(在起点和终点也会学习当地的文化),国家间的道路距离,试求
从起点到终点最少需走多少路。
输入输出格式
输入格式:
第一行为五个整数 N,K,M,S,T,每两个整数之间用一个空格隔开,依次代表国家
个数(国家编号为 1 到 N),文化种数(文化编号为 1 到 K),道路的条数,以及起点和终点
的编号(保证 S 不等于 T);
第二行为 N 个整数,每两个整数之间用一个空格隔开,其中第 i 个数 Ci,表示国家 i
的文化为 Ci。
接下来的 K 行,每行 K 个整数,每两个整数之间用一个空格隔开,记第 i 行的第 j 个数
为 aij,aij= 1 表示文化 i 排斥外来文化 j(i 等于 j 时表示排斥相同文化的外来人),aij= 0 表示
不排斥(注意 i 排斥 j 并不保证 j 一定也排斥 i)。
接下来的 M 行,每行三个整数 u,v,d,每两个整数之间用一个空格隔开,表示国家 u
与国家 v 有一条距离为 d 的可双向通行的道路(保证 u 不等于 v,两个国家之间可能有多条
道路)。
输出格式:
输出只有一行,一个整数,表示使者从起点国家到达终点国家最少需要走的距离数(如
果无解则输出-1)。
输入输出样例
2 2 1 1 2
1 2
0 1
1 0
1 2 10
-1
2 2 1 1 2
1 2
0 1
0 0
1 2 10
10
说明
输入输出样例说明1
由于到国家 2 必须要经过国家 1,而国家 2 的文明却排斥国家 1 的文明,所以不可能到
达国家 2。
输入输出样例说明2
路线为 1 -> 2
【数据范围】
对于 100%的数据,有 2≤N≤100 1≤K≤100 1≤M≤N2 1≤ki≤K 1≤u, v≤N 1≤d≤1000 S≠T 1≤S,T≤N
NOIP 2012 普及组 第四题
#include<cstdio>
#include<algorithm>
using namespace std;
const int MAXN = ;
int dis[MAXN][MAXN];
int cul[MAXN];
int cant[MAXN][MAXN];
int n,k,m,s,t; int main()
{
scanf("%d%d%d%d%d",&n,&k,&m,&s,&t);
for (int i=; i<=n; ++i)
for (int j=; j<=n; ++j)
dis[i][j] = 1e8;
for (int i=; i<=n; ++i)
scanf("%d",&cul[i]);
for (int i=; i<=k; ++i)
for (int j=; j<=k; ++j)
scanf("%d",&cant[i][j]);
for (int u,v,w,i=; i<=m; ++i)
{
scanf("%d%d%d",&u,&v,&w);
if (!cant[cul[u]][cul[v]]) dis[v][u] = min(dis[v][u],w);
if (!cant[cul[v]][cul[u]]) dis[u][v] = min(dis[u][v],w);
}
for (int k=; k<=n; ++k)
for (int i=; i<=n; ++i)
for (int j=; j<=n; ++j)
if (!cant[cul[j]][cul[i]]&&!cant[cul[k]][cul[i]]&&!cant[cul[j]][k])
dis[i][j] = min(dis[i][k]+dis[k][j],dis[i][j]);
if(dis[s][t]>=1e8) printf("-1");
else printf("%d",dis[s][t]);
return ;
}
P1078 文化之旅的更多相关文章
- [最短路]P1078 文化之旅
题目描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一 种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不 同的国家可能有相同的文化.不同 ...
- 洛谷 P1078 文化之旅
P1078 文化之旅 题目描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不同的国家可能 ...
- 洛谷 P1078 文化之旅 解题报告
P1078 文化之旅 题目描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不同的国家可能 ...
- 洛谷P1078 文化之旅
P1078 文化之旅 1.1K通过 3.6K提交 题目提供者洛谷OnlineJudge 标签NOIp普及组2012 难度普及+/提高 时空限制1s / 128MB 提交 讨论 题解 最新讨论更多讨 ...
- 洛谷——P1078 文化之旅
P1078 文化之旅 题目描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不同的国家可能 ...
- 2021.08.16 P1078 文化之旅(最短路)
2021.08.16 P1078 文化之旅(最短路) 题意: n个地,k个信仰,每个地都有自己的信仰,信仰之间会相互排斥,同信仰之间也会相互排斥,有m条路,问从s到t的最短距离是多少? 有一位使者要游 ...
- Luogu P1078 文化之旅
题目描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不同的国家可能有相同的文化.不同文化 ...
- 洛谷 P1078 文化之旅(CODEVS 1316)
题目描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一 种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不 同的国家可能有相同的文化.不同 ...
- P1078 文化之旅[最短路]
题目背景 本题是错题,后来被证明没有靠谱的多项式复杂度的做法.测试数据非常的水,各种玄学做法都可以通过(比如反着扫),不代表算法正确.因此本题题目和数据仅供参考. 题目描述 有一位使者要游历各国,他每 ...
随机推荐
- Jmeter入门2 http请求—简单的get请求
发送一个简单的get http请求 1 启动Jmeter,在测试计划上点击鼠标右键>添加>Threads(Users)>线程组 2 线程组界面.可设置线程数,几秒启动所有线程,循环次 ...
- wireshark抓取本地回环数据包
linux环境下,用tcpdump,可以用-i lo参数抓取环回接口的包.如果服务端和客户端安装在同一台机器上,调试时是很方便的.linux版的wireshark,选取网卡的菜单里也有lo选项,也 ...
- 关于node-sass安装失败的解决办法
在测试gulp-webapp的时候遇到了 styles 不能被正常编译的问题,究其原因是node-sass没有被正常安装. 根本原因是国内网络的原因. 最终的解决方法是通过淘宝的npm镜像安装node ...
- 【洛谷P2831】[NOIP2016]愤怒的小鸟
愤怒的小鸟 题目链接 本来是刷状压DP的,然而不会.. 搜索是比较好想的,直接dfs就行了 我们可以知道两只猪确定一条抛物线 依次处理每一只猪,有以下几种方法: 1.先看已经建立的抛物线是否能打到这只 ...
- Android学习笔记_73_授权过程
.需要申请App Key和App Secret.不同的开发平台有不同的接入方式,可以参考文档,然后将这两个值放进去. .通过OAuth类实现认证,它会自动跳转到认证界面,进行授权,成功之后需要处理回调 ...
- MySQL存储引擎与索引
引言: MySQL存储引擎主要分为 InnoDB 存储引擎与 MyISAM 存储引擎.都采用B+数的存储结构. 应用场景: InnoDB适合:(1)可靠性要求比较高,要求事务:(2)大量 insert ...
- CentOS 7 安装oracle 11G
一.安装Oracle前准备 首先要设置主机名,并在/etc/hosts下解析. 镜像没挂全,导致缺少包pdksh-5.2.14.compat-libstdc++-33-3.2.3 1.创建运行orac ...
- sqlServer2014安装说明(windows7 64位)
SqlServer2014安装说明(windows7 64位) 地址:https://www.microsoft.com/zh-cn/download/details.aspx?id=42299 1, ...
- Git工作流指南:Gitflow工作流
git工作流 1.Git flow 核心分支:master,dev 可能还会有:功能分支,bug修复分支,预发布分支 2.github flow:只一个长期分支,就是master 第一步:根据需求,从 ...
- round函数在oracle和mysql中用法
1.oracle和mysql通用方法 #round(字段1,小数位数) 四舍五入select round('11.123456',4);结果:11.1235 2.mysql的另外2种保留小数位数方法# ...