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 文化之旅 解题报告的更多相关文章

  1. 洛谷P1078 文化之旅

    P1078 文化之旅 1.1K通过 3.6K提交 题目提供者洛谷OnlineJudge 标签NOIp普及组2012 难度普及+/提高 时空限制1s / 128MB 提交  讨论  题解 最新讨论更多讨 ...

  2. 洛谷 P1078 文化之旅

    P1078 文化之旅 题目描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不同的国家可能 ...

  3. 洛谷——P1078 文化之旅

    P1078 文化之旅 题目描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不同的国家可能 ...

  4. 洛谷 P1078 文化之旅(CODEVS 1316)

    题目描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一 种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不 同的国家可能有相同的文化.不同 ...

  5. 洛谷_Cx的故事_解题报告_第四题70

    1.并查集求最小生成树 Code: #include <stdio.h> #include <stdlib.h>   struct node {     long x,y,c; ...

  6. 洛谷 P2317 [HNOI2005]星际贸易 解题报告

    P2317 [HNOI2005]星际贸易 题目描述 输入输出格式 输入格式: 输出格式: 如果可以找到这样的方案,那么输出文件output.txt中包含两个整数X和Y.X表示贸易额,Y表示净利润并且两 ...

  7. 洛谷 P3802 小魔女帕琪 解题报告

    P3802 小魔女帕琪 题目背景 从前有一个聪明的小魔女帕琪,兴趣是狩猎吸血鬼. 帕琪能熟练使用七种属性(金.木.水.火.土.日.月)的魔法,除了能使用这么多种属性魔法外,她还能将两种以上属性组合,从 ...

  8. 洛谷 P2606 [ZJOI2010]排列计数 解题报告

    P2606 [ZJOI2010]排列计数 题目描述 称一个\(1,2,...,N\)的排列\(P_1,P_2...,P_n\)是\(Magic\)的,当且仅当对所以的\(2<=i<=N\) ...

  9. 洛谷1303 A*B Problem 解题报告

    洛谷1303 A*B Problem 本题地址:http://www.luogu.org/problem/show?pid=1303 题目描述 求两数的积. 输入输出格式 输入格式: 两个数 输出格式 ...

随机推荐

  1. BodeAbp概述

    BodeAbp框架基于github开源框架ASP.NET Boilerplate,abp项目地址:https://github.com/aspnetboilerplate/aspnetboilerpl ...

  2. 个人java框架 技术分析

    1.框架选型 spring-boot https://github.com/JeffLi1993/springboot-learning-example https://mp.weixin.qq.co ...

  3. Webpack 2 视频教程 005 - Webpack 编译输出日志

    原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...

  4. 【URLOS开发入门】docker官方系统镜像——Alpine入门教程

    我们在进行URLOS应用开发时,经常会用到一些基础系统镜像,如:ubuntu.CentOS.Debian等,我们可以通过docker pull命令直接拉取官方镜像. root@ubuntu:~# do ...

  5. Tomcat通过Redis实现session共享的完整部署记录

    对于生产环境有了一定规模的tomcat集群业务来说,要实现session会话共享,比较稳妥的方式就是使用数据库持久化session.为什么要持久化session(共享session)呢?因为在客户端每 ...

  6. AnyProxy做App网络流量测试

    前言: AnyProxy是一个开放式的HTTP代理服务器.Github主页:[https://github.com/alibaba/anyproxy]主要特性包括: 基于Node.js,开放二次开发能 ...

  7. webpack详细配置解析

    阅读本文之前,先看下面这个webpack的配置文件,如果每一项你都懂,那本文能带给你的收获也许就比较有限,你可以快速浏览或直接跳过:如果你和十天前的我一样,对很多选项存在着疑惑,那花一段时间慢慢阅读本 ...

  8. php7与之前的区别和更新【转】

    http://blog.csdn.net/u011957758/article/details/73320083 本文是一篇讲座听后+后续研究的总结. 话说当年追时髦,php7一出就给电脑立马装上了, ...

  9. last individual reading task 12061183叶露婷

    http://www.cnblogs.com/yltyy/p/4025426.html 1.Different people deserve different tasks; Once team ro ...

  10. Linux内核分析第六周总结

    进程控制块PCB--task_struct 操作系统的内核里的三大功能: 进程管理 内存管理 文件系统 进程描述符--task_struct 进程管理是最核心的内容 然而Linux进程的状态与操作系统 ...