[最短路]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 普及组 第四题
分析
在Dalao @dxyinme-Zz 的代码开导下,思路此题可以归结为 "带限制条件的最短路问题",可以把文化冲突 与 文化重复(US)看作最短路的附加条件,再跑一边Dijk即可
- #include<bits/stdc++.h>
- #define Pa pair<int,int>
- using namespace std;
- struct edge
- {
- int to,w;
- };
- edge unio(int x,int y)
- {
- edge _s;
- _s.to=x,_s.w=y;
- return _s;
- }
- int n,m,k,s,t;
- priority_queue<Pa,vector<Pa>,greater<Pa> >q;
- ],a[][],dis[];//从小值优先
- vector<edge>vec[];
- ],us[];//
- int main()
- {
- /*
- P1078 文化之旅,具有限制条件的单源最短路
- */
- cin>>n>>k>>m>>s>>t;
- ; i<=n; i++) cin>>c[i];//录入i国文化
- ; i<=k; i++)
- ; j<=k; j++)
- cin>>a[i][j];//录入冲突文化
- ; i<=m; i++)
- {
- int u,v,w;
- cin>>u>>v>>w;//Vector建图
- vec[u].push_back(unio(v,w));
- vec[v].push_back(unio(u,w));
- }
- //Fuction_Dijkstra:{}
- memset(dis,0x7f,sizeof dis);//初始化
- dis[s]=;
- us[s]=;
- q.push(make_pair(,s));
- while(!q.empty())//PI<花费,编号>
- {
- int x=q.top().second;//去除编号
- q.pop();
- if(vis[x]) continue;//已访问,跳过
- ; i<vec[x].size(); i++)//遍历从这儿出发的边
- if(a[c[vec[x][i].to]][c[x]] || us[vec[x][i].to]) continue;//冲突,已经去过(学习过)
- else if(dis[vec[x][i].to]>dis[x]+vec[x][i].w)
- {
- dis[vec[x][i].to]=dis[x]+vec[x][i].w;//松弛操作
- q.push(make_pair(dis[vec[x][i].to],vec[x][i].to));
- }
- }
- if(dis[t]==0x7f7f7f7f) printf("-1\n");
- else printf("%d\n",dis[t]);
- ;
- }
[最短路]P1078 文化之旅的更多相关文章
- 2021.08.16 P1078 文化之旅(最短路)
2021.08.16 P1078 文化之旅(最短路) 题意: n个地,k个信仰,每个地都有自己的信仰,信仰之间会相互排斥,同信仰之间也会相互排斥,有m条路,问从s到t的最短距离是多少? 有一位使者要游 ...
- 洛谷 P1078 文化之旅
P1078 文化之旅 题目描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不同的国家可能 ...
- 洛谷 P1078 文化之旅 解题报告
P1078 文化之旅 题目描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不同的国家可能 ...
- 洛谷P1078 文化之旅
P1078 文化之旅 1.1K通过 3.6K提交 题目提供者洛谷OnlineJudge 标签NOIp普及组2012 难度普及+/提高 时空限制1s / 128MB 提交 讨论 题解 最新讨论更多讨 ...
- P1078 文化之旅
P1078 文化之旅 题目描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一 种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不 同的国家 ...
- 洛谷——P1078 文化之旅
P1078 文化之旅 题目描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不同的国家可能 ...
- P1078 文化之旅[最短路]
题目背景 本题是错题,后来被证明没有靠谱的多项式复杂度的做法.测试数据非常的水,各种玄学做法都可以通过(比如反着扫),不代表算法正确.因此本题题目和数据仅供参考. 题目描述 有一位使者要游历各国,他每 ...
- Luogu P1078 文化之旅
题目描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不同的国家可能有相同的文化.不同文化 ...
- 洛谷 P1078 文化之旅(CODEVS 1316)
题目描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一 种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不 同的国家可能有相同的文化.不同 ...
随机推荐
- jQuery和AngularJS的区别
这篇文章主要介绍了jQuery和AngularJS的区别浅析,本文着重讲解一个熟悉jQuery开的程序员如何应对AngularJS中的一些编程思想的转变,需要的朋友可以参考下 最近一直在研究ang ...
- phpstudy升级mysql数据库
因为MySQL支持全文索引的只有5.6以上,而我下的phpstudy只有5.5的版本,在导入数据库的时候因为该数据库的表内有使用全文索引,因此必须升级phpstudy的mysql版本,这里就把自己当升 ...
- 创建一个ROS工作空间(ROS Workspace)
详细参照 http://wiki.ros.org/ROS/Tutorials/InstallingandConfiguringROSEnvironment1.mkdir -p ~/catkin_ws/ ...
- wordpress 源代码 高亮显示 (Crayon Syntax Highlighter)
作为码农,blog 里面不贴源代码像什么话,源代码没有高亮显示,那还怎么看!一番调研之后,Crayon Syntax Highlighter 可能是最流行,功能最强大的一款代码高亮插件了. 一.安装 ...
- Cosmos OpenSSD--greedy_ftl1.2.0(一)
从主函数跳到ReqHandler,在ReqHandler内先初始化SSD--InitNandReset,然后建立映射表InitFtlMapTable void InitNandReset() { // ...
- Servlet 笔记-异常处理
当一个 Servlet 抛出一个异常时,Web 容器在使用了 exception-type 元素的 web.xml 中搜索与抛出异常类型相匹配的配置. 必须在 web.xml 中使用 error-pa ...
- Spring Cloud官方文档中文版-Spring Cloud Config(上)
官方文档地址为:http://cloud.spring.io/spring-cloud-static/Dalston.SR2/#spring-cloud-feign 文中例子我做了一些测试在:http ...
- 使用angular4和asp.net core 2 web api做个练习项目(二), 这部分都是angular
上一篇: http://www.cnblogs.com/cgzl/p/7755801.html 完成client.service.ts: import { Injectable } from '@an ...
- Red and Black
Problem Description There is a rectangular room, covered with square tiles. Each tile is colored eit ...
- Android 开发笔记___RelativeLayout
xml文件实现 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" andr ...