文化之旅的本质是最短路问题,只不过添加了一个文化排斥,仅需要做最短路时判断一下是否排斥即可

因为数据较小,采用了Floyd算法,以下是代码,关键部分附注释:

#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#define Size 105
using namespace std; int N,K,M,S,T;
int G[Size][Size];//邻接矩阵
int c[Size];//c[i]表示第i个国家的文化
bool against[Size][Size];//如果a排斥b,against[a][b]=1,反之为0 bool chack(int a,int b){//判断国家a与b是否排斥
return against[c[a]][c[b]];
} void input(){
cin>>N>>K>>M>>S>>T; for(int i=;i<=N;i++){
cin>>c[i];
} for(int i=;i<=K;i++){//一开始写成<=N,结果...
for(int j=;j<=K;j++){
cin>>against[i][j];
}
} int a,b,v;
for(int i=;i<=M;i++){
cin>>a>>b>>v;
if(!chack(b,a))G[a][b]=v;//如果b排斥a,则即使a与b之间有路也不能走,G[a][b]=0x3f3f3f3f(见初始化)。反之,就赋值为道路长度v
if(!chack(a,b))G[b][a]=v;//同上。
}
} void Folyd(){
for(int k=;k<=N;k++){
for(int a=;a<=N;a++){
if(a==k || chack(k,a))continue;//注意判断是否排斥。因为a->k,要保证k不排斥a,所以chack(k,a),不要写反了
for(int b=;b<=N;b++){
if(b==a||b==k || chack(b,a)||chack(b,k))continue;//同上
G[a][b]=min(G[a][b], G[a][k]+G[k][b]);//因为初始化时G就被赋为最大值,所以无需判断a,k,b之间是否有路。直接取最小值即可
}
}
}
} int main(){
memset(G,0x3f,sizeof(G)); input(); Folyd(); if(G[S][T]>=0x3f3f3f3f)cout<<-;
else cout<<G[S][T]; return ;
}

code1316 文化之旅的更多相关文章

  1. [最短路]P1078 文化之旅

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

  2. 洛谷 P1078 文化之旅

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

  3. 洛谷 P1078 文化之旅 解题报告

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

  4. 洛谷P1078 文化之旅

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

  5. java算法 蓝桥杯 文化之旅

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

  6. AC日记——文化之旅 洛谷 P1078

    文化之旅 思路: 暴搜,倒搜: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 105 #define max ...

  7. 【Floyd】文化之旅

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

  8. 文化之旅(dijstra)

    2012_p4 文化之旅 (culture.cpp/c/pas) 时间限制: 1 Sec  内存限制: 128 MB提交: 43  解决: 16[提交][状态][讨论版][命题人:外部导入] 题目描述 ...

  9. P1078 文化之旅

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

随机推荐

  1. Unit03: 容器对路径的处理 、 Servlet特性

    Unit03: 容器对路径的处理 . Servlet特性 案例一:查询,增加员工: 重定向 处理请求资源路径 目录结构: 案例代码: package dao; import java.io.Seria ...

  2. STM32的启动过程分析

    对于stm32的启动过程一直心存疑惑.今天找了很多资料,进行了一个大致的分析. 1.cortex M3的复位过程(来自官方资料) 上述开机启动流程比较详细,内容较为全面,但部分步骤可以省略(红字可省略 ...

  3. C++使用回溯法实现N皇后问题的求解

    回溯法是个很无聊的死算方法,没什么技巧,写这篇博客主要原因是以前思路不太清晰,现在突然想用回溯法解决一个问题时,无法快速把思路转换成代码. ------------------------------ ...

  4. 全局获取Context

    1.定制一个Application类,管理全局的状态信息 public class MyApplication extends Application{ private static Context ...

  5. js正则表达式验证大全--转载

    转载来源:http://www.cnblogs.com/hai-ping/articles/2997538.html#undefined //判断输入内容是否为空 function IsNull(){ ...

  6. Java-Runoob-高级教程:Java 文档注释

    ylbtech-Java-Runoob-高级教程:Java 文档注释 1.返回顶部 1. Java 文档注释 Java 支持三种注释方式.前两种分别是 // 和 /* */,第三种被称作说明注释,它以 ...

  7. 杂项:SpagoBI

    ylbtech-杂项:SpagoBI SpagoBI是一个商业智能平台,为商业智能项目提供了一个完整开源的解决方案.它涵盖了一个BI系统所有方面的功能包括:数据挖掘.查询.分析.报告.Dashboar ...

  8. Codeforces-591C题解

    一.题目链接 http://codeforces.com/problemset/problem/591/C 二.题意 给定一个只含数字0和1的数组,通过如下方式,变成不再变化的01组合,最少需要操作几 ...

  9. 在linux下使用debugfs恢复rm删除的文件

    原理主要是删除的文件并没有实际上从硬盘上摸去,只是inode索引删除了相关的信息,因此只要找到刚删除文件的block上,就可以恢复已经删除的文件. 以下方法在ext3的文件系统上测试通过,ext2的没 ...

  10. ubuntu下用expect实现密码自动输入

    每次笔记本一开机启动,总会连用不着且碍事的触摸板也一块启动.便想写个脚本,让电脑启动时关闭触摸板.(当然,我想更好的办法是,修改系统启动时的加载模块,让触摸板不自动加载,但是目前还不知道用这种方法怎么 ...