(题目描述略)

对于这道题,最好的方法是直接BFS,而大多数通过动归解决的算法都不太可能是完全正确的。

代码如下:

#include"stdio.h"
#include"string.h"
struct construction
{bool tc[105],td[105];//tc记录文化是否学习,td记录国家是否到达int now,sum;//now记录当前节点,sum记录当前路径长度
}q[50000];//模拟队列
int a[105][105],c[105],k,map[105][105],reflect[50000];
bool judge(int i,int j)
{for(int l=1;l<=k;l++)if(q[i].tc[l]&&a[c[j]][l]==1)return false;return true;
}
int main()
{freopen("culture.in","r",stdin);freopen("culture.out","w",stdout);memset(map,-1,sizeof(map));int ans=-1,m,n,s,t,top=1,u,v;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",&a[i][j]);a[i][i]=1;}while(m--){scanf("%d %d",&u,&v);scanf("%d",&map[u][v]);if(map[v][u]==-1||map[u][v]<map[v][u])map[v][u]=map[u][v];}reflect[0]=q[0].sum=0;q[0].now=s;q[0].tc[c[s]]=q[0].td[s]=true;for(int i=0;i<top;i++){if(top>20000){printf("-1");return 0;}if(q[reflect[i]].now==t){ans=q[reflect[i]].sum;break;}for(int j=1;j<=n;j++)if(map[q[reflect[i]].now][j]!=-1&&!q[reflect[i]].td[j]&&judge(reflect[i],j)){q[top].now=j;q[top].sum=q[reflect[i]].sum+map[q[reflect[i]].now][j];for(int l=1;l<=k;l++)q[top].tc[l]=q[reflect[i]].tc[l];for(int l=1;l<=n;l++)q[top].td[l]=q[reflect[i]].td[l];q[top].tc[c[j]]=true;q[top].td[j]=true;reflect[top]=top++;//reflect调整节点搜索次序,使路径最短for(int l=top-2;i<l&&q[reflect[l]].sum>q[reflect[l+1]].sum;l--)m=reflect[l],reflect[l]=reflect[l+1],reflect[l+1]=m;}}printf("%d",ans);return 0;
}

由于本题官方数据过弱,导致某些没有考虑文化相斥的算法也能通过。当然,由于笔者也因无正确数据而无法保证此程序对于考虑文化相斥数据的正确性。不过,此算法的思路是基于考虑文化相斥的,虽然时间较动归算法而言略慢,但仍不失为一种考虑周全的算法。

NOIP2012P4 文化之旅 题解相关推荐

  1. noip2012 文化之旅 (深搜,最优性剪枝)

    P2070 [NOIP2012P4]文化之旅 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP 2012 普及组 题4 描述 有一位使者要游历各国,他 ...

  2. 【codevs1316NOIP2012PJ】文化之旅,无题

    文化之旅 2012年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 有一位使者要游历各国,他每到一个国 ...

  3. 文化之旅(dijstra)

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

  4. Java实现 蓝桥杯VIP 算法提高 文化之旅

    算法提高 文化之旅 时间限制:1.0s 内存限制:128.0MB 问题描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不 ...

  5. [普及] NOIP 2012 文化之旅

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

  6. NOIP 2012 普及组 复赛 culture 文化之旅

    NOIP 2012 普及组 复赛 culture 文化之旅 1.找寻迪杰斯特拉(Dijkstra)算法,难度适中,过程中,找到该题. 2.结合题意,弄懂输入输出样例是关键一步. 3.为了能解决2,纸笔 ...

  7. 【原创】【NOIP】文化之旅

    文化之旅(culture.cpp) 时间限制: 1 Sec   内存限制: 128 MB 提交: 86   解决: 1 [ →][ ~\(≧▽≦)/~单击此处查看最不建议你看的博客~\(≧▽≦)/~] ...

  8. NOIP2012 普及组 T4 文化之旅

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

  9. 关注李敖神州文化之旅

    李敖先生是个狂人.怪人.是一个有文化的人.众人对此君评价不一. 我尊敬他,有这么几个原因:(没有顺序之分) 1. 他最近做了三场演讲,个人认为,这三场演讲的意义巨大: 2. 他对日本人的态度.听他说: ...

最新文章

  1. python随机排列图片_python 随机打乱 图片和对应的标签方法
  2. c++中的输入输出方法
  3. 统一修改文件下所有图片大小 Python3
  4. python(numpy,pandas12)——pandas plot 画图
  5. hello world的Java代码,Java语言实现hello world代码
  6. java date 转integer_java 中Date的各种格式转换
  7. 40访问者模式(Visitor Pattern)
  8. 看脸色知体内各积毒 有效清洁内脏妙方
  9. 属于 Hadoop 的大数据时代已结束
  10. linux桌面版如何添加新网络,ubuntu网络配置(桌面版和服务器版)
  11. 17. 使用“swap技巧”除去多余得容量
  12. java线性表多个属性_顺序存储结构的线性表(java实现)
  13. 笔记本设置路由实现内外网同时使用
  14. 计算机读不出光盘,光驱读不出光盘,小编教你电脑光盘不能被识别怎么解决
  15. 服务器与操作系统的区别是什么,服务器系统和普通用户操作系统有何区别
  16. 第一次用HTML设计表格,以及使用百度脑图的感受
  17. 高效人士的七个好习惯
  18. GoDaddy3月份域名注册量达到3千多万 色情功不可没
  19. MySQL 统计各领域数量及其百分比
  20. ArcGIS制作栅格动图

热门文章

  1. Golang学习笔记汇总
  2. hbase数据库_hbase数据库 修改数据
  3. 07SpringCloud-Elasticsearch
  4. Nginx 获取客户端真实IP $remote_addr与X-Forwarded-For
  5. 取代 Ant:使用 Maven 管理 Wowza 插件开发
  6. TIA Portal面向对象编程入门
  7. VMware 12 Exception 0xc0000005
  8. [oeasy]python0072_修改字体前景颜色_foreground_color_font
  9. 批处理---findstr命令详解
  10. Backtrack5安装