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. 51Nod 1677 treecnt

    一道比较基础的计数题,还是一个常用的单独计算贡献的例子. 首先看题目和范围,暴力枚举肯定是不可行的,而且\(O(n\ logn)\)的算法貌似很难写. 那我们就来想\(O(n)\)的吧,我们单独考虑每 ...

  2. [Spark][Python]Wordcount 例子

    [training@localhost ~]$ hdfs dfs -cat cats.txt The cat on the matThe aardvark sat on the sofa[traini ...

  3. C#使用FFMPEG推流,并且获取流保存在本地,随时取媒体进行播放!

    最近开发了基于C#的推流器一直不大理想,终于在不懈努力之后研究了一点成果,这边做个笔记:本文着重在于讲解下如何使用ffmpeg进行简单的推流,看似简单几行代码没有官方的文档很吃力.并获取流的源代码:如 ...

  4. 开源数据同步神器——canal

    前言 如今大型的IT系统中,都会使用分布式的方式,同时会有非常多的中间件,如redis.消息队列.大数据存储等,但是实际核心的数据存储依然是存储在数据库,作为使用最广泛的数据库,如何将mysql的数据 ...

  5. Session之Config配置

    <sessionState mode="Off|InProc|StateServer|SQLServer" cookieless="true|false" ...

  6. Educational Codeforces Round 49 (Rated for Div. 2)A到C题

    A题意 给你t表示有t组测试数据,每组数据给你一个含小写字母的字符串,每个字符必须变为它相邻的字符,问最后是否能变成回文串.a不能变成z,反过来也不行 分析 只需对对称位置判断差是否小于2且不等于1, ...

  7. SoftwareEngineering Individual Project - Word frequency program

    说实话前面c#实在没怎么学过.这次写起来感觉非常陌生,就连怎么引用名空间都忘记了.在经过恶补后还是慢慢地适应了. 1.项目预计用时: 构建并写出大概的数据结构,程序框架及模块: 30min 实现文件夹 ...

  8. <构建之法>13-17

    13章软件测试. 从基本名词到软件测试的分类方法,啃完这15页书,至少对与软件测试的理解程度不是停留在以前的层次(让用户使用,然后提出碰到什么问题) 测试不是那么简单就阐述的完全.测试按测试目的分类可 ...

  9. PAT 甲级 1130 Infix Expression

    https://pintia.cn/problem-sets/994805342720868352/problems/994805347921805312 Given a syntax tree (b ...

  10. Eclipse频繁崩溃问题待解决

    ---------------------------Eclipse---------------------------Java was started but returned exit code ...