洛谷 P1078 文化之旅 解题报告
P1078 文化之旅
题目描述
有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家)。不同的国家可能有相同的文化。不同文化的国家对其他文化的看法不同,有些文化会排斥外来文化(即如果他学习了某种文化,则他不能到达排斥这种文化的其他国家)。
现给定各个国家间的地理关系,各个国家的文化,每种文化对其他文化的看法,以及这位使者游历的起点和终点(在起点和终点也会学习当地的文化),国家间的道路距离,试求从起点到终点最少需走多少路。
输入输出格式
输入格式:
第一行为五个整数 \(N,K,M,S,T\),每两个整数之间用一个空格隔开,依次代表国家个数(国家编号为1到\(N\)),文化种数(文化编号为1到\(K\)),道路的条数,以及起点和终点的编号(保证\(S\)不等于\(T\));
第二行为\(N\)个整数,每两个整数之间用一个空格隔开,其中第\(i\)个数\(C_i\),表示国家\(i\)的文化为\(C_i\)。
接下来的\(K\)行,每行\(K\)个整数,每两个整数之间用一个空格隔开,记第\(i\)行的第\(j\)个数为\(a_{ij}\),\(a_{ij}=1\)表示文化\(i\)排斥外来文化\(j\)(\(i\) 等于\(j\)时表示排斥相同文化的外来人),\(a_{ij}=0\)表示不排斥(注意\(i\)排斥\(j\)并不保证\(j\)一定也排斥\(i\))。
接下来的\(M\)行,每行三个整数\(u,v,d\) ,每两个整数之间用一个空格隔开,表示国家\(u\)与国家\(v\)有一条距离为\(d\)的可双向通行的道路(保证\(u\)不等于\(v\) ,两个国家之间可能有多条道路)。
输出格式:
一个整数,表示使者从起点国家到达终点国家最少需要走的距离数(如果无解则输出 −1 )。
UPT:这是个错题,无视吧。
这道题教会了我一个道理,当数据比较小时,只要复杂度正确,怎么暴力怎么来。
我唯唯诺诺了半天不敢直接写SPFA,最后一写居然就直接过了。
将SPFA中带结构体表示当前点还可以访问的文化,每次进点时多花一个\(O(N)\)处理就行了
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
const int N=104;
int n,k,m,s,t;//k文化个数
int c[N],g[N][N],head[N],w[N*N],to[N*N],next[N*N],cnt=0,dis[N];
void add(int u,int v,int ww){next[++cnt]=head[u];to[cnt]=v;w[cnt]=ww;head[u]=cnt;}
struct node
{
int from,is[N];
};
queue <node > q;
void spfa()
{
node mes;
for(int i=1;i<=k;i++)
mes.is[i]=g[c[s]][i];
mes.from=s;
mes.is[c[s]]=0;
q.push(mes);
memset(dis,0x3f,sizeof(dis));
dis[s]=0;
while(!q.empty())
{
node tt=q.front();
q.pop();
for(int i=head[tt.from];i;i=next[i])
{
int v=to[i];
if(tt.is[c[v]]&&dis[tt.from]+w[i]<dis[v])
{
node tmp=tt;
dis[v]=dis[tt.from]+w[i];
for(int j=1;j<=k;j++)
if(!g[c[v]][j])
tmp.is[j]=0;
tmp.is[c[v]]=0;
tmp.from=v;
q.push(tmp);
}
}
}
if(dis[t]==0x3f3f3f3f) printf("-1\n");
else printf("%d\n",dis[t]);
}
int main()
{
scanf("%d%d%d%d%d",&n,&k,&m,&s,&t);
for(int i=1;i<=n;i++) scanf("%d",c+i);
for(int i=1;i<=k;i++)
for(int j=1;j<=k;j++)
{
scanf("%d",&g[j][i]);
g[j][i]^=1;
}
int u,v,ww;
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&u,&v,&ww);
add(u,v,ww),add(v,u,ww);
}
spfa();
return 0;
}
2018.6.17
洛谷 P1078 文化之旅 解题报告的更多相关文章
- 洛谷P1078 文化之旅
P1078 文化之旅 1.1K通过 3.6K提交 题目提供者洛谷OnlineJudge 标签NOIp普及组2012 难度普及+/提高 时空限制1s / 128MB 提交 讨论 题解 最新讨论更多讨 ...
- 洛谷 P1078 文化之旅
P1078 文化之旅 题目描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不同的国家可能 ...
- 洛谷——P1078 文化之旅
P1078 文化之旅 题目描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不同的国家可能 ...
- 洛谷 P1078 文化之旅(CODEVS 1316)
题目描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一 种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不 同的国家可能有相同的文化.不同 ...
- 洛谷_Cx的故事_解题报告_第四题70
1.并查集求最小生成树 Code: #include <stdio.h> #include <stdlib.h> struct node { long x,y,c; ...
- 洛谷 P2317 [HNOI2005]星际贸易 解题报告
P2317 [HNOI2005]星际贸易 题目描述 输入输出格式 输入格式: 输出格式: 如果可以找到这样的方案,那么输出文件output.txt中包含两个整数X和Y.X表示贸易额,Y表示净利润并且两 ...
- 洛谷 P3802 小魔女帕琪 解题报告
P3802 小魔女帕琪 题目背景 从前有一个聪明的小魔女帕琪,兴趣是狩猎吸血鬼. 帕琪能熟练使用七种属性(金.木.水.火.土.日.月)的魔法,除了能使用这么多种属性魔法外,她还能将两种以上属性组合,从 ...
- 洛谷 P2606 [ZJOI2010]排列计数 解题报告
P2606 [ZJOI2010]排列计数 题目描述 称一个\(1,2,...,N\)的排列\(P_1,P_2...,P_n\)是\(Magic\)的,当且仅当对所以的\(2<=i<=N\) ...
- 洛谷1303 A*B Problem 解题报告
洛谷1303 A*B Problem 本题地址:http://www.luogu.org/problem/show?pid=1303 题目描述 求两数的积. 输入输出格式 输入格式: 两个数 输出格式 ...
随机推荐
- BodeAbp概述
BodeAbp框架基于github开源框架ASP.NET Boilerplate,abp项目地址:https://github.com/aspnetboilerplate/aspnetboilerpl ...
- 个人java框架 技术分析
1.框架选型 spring-boot https://github.com/JeffLi1993/springboot-learning-example https://mp.weixin.qq.co ...
- Webpack 2 视频教程 005 - Webpack 编译输出日志
原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...
- 【URLOS开发入门】docker官方系统镜像——Alpine入门教程
我们在进行URLOS应用开发时,经常会用到一些基础系统镜像,如:ubuntu.CentOS.Debian等,我们可以通过docker pull命令直接拉取官方镜像. root@ubuntu:~# do ...
- Tomcat通过Redis实现session共享的完整部署记录
对于生产环境有了一定规模的tomcat集群业务来说,要实现session会话共享,比较稳妥的方式就是使用数据库持久化session.为什么要持久化session(共享session)呢?因为在客户端每 ...
- AnyProxy做App网络流量测试
前言: AnyProxy是一个开放式的HTTP代理服务器.Github主页:[https://github.com/alibaba/anyproxy]主要特性包括: 基于Node.js,开放二次开发能 ...
- webpack详细配置解析
阅读本文之前,先看下面这个webpack的配置文件,如果每一项你都懂,那本文能带给你的收获也许就比较有限,你可以快速浏览或直接跳过:如果你和十天前的我一样,对很多选项存在着疑惑,那花一段时间慢慢阅读本 ...
- php7与之前的区别和更新【转】
http://blog.csdn.net/u011957758/article/details/73320083 本文是一篇讲座听后+后续研究的总结. 话说当年追时髦,php7一出就给电脑立马装上了, ...
- last individual reading task 12061183叶露婷
http://www.cnblogs.com/yltyy/p/4025426.html 1.Different people deserve different tasks; Once team ro ...
- Linux内核分析第六周总结
进程控制块PCB--task_struct 操作系统的内核里的三大功能: 进程管理 内存管理 文件系统 进程描述符--task_struct 进程管理是最核心的内容 然而Linux进程的状态与操作系统 ...