标签:                                         搜索图结构 最短路                                    NOIP普及组2012

题目链接 : 点这里 。

这是一道最短路题目,一开始当做暴搜题目来做TLE很多次,想要优化却改成WrongAnswer。最后用SPFA 过了。

思路:最短路,松弛判断的时候判断文化之间是否排斥,用一个二维数组记录当前城市那些文化已经学习;这一个状态的文化 = 上一个状态的文化 + 此次学习的文化。dfs 会比较慢。

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<queue>using namespace std;
typedef long long int LL;
const int INF=2e9+1e8;
const int MAXSIZE=10000;int N,K,M,S,T; //题目信息
int first[MAXSIZE],knext[MAXSIZE],ntotal;  //邻接表,这是邻接表的数组存储方式;
struct Edge
{int s,t,val;
};
Edge edge[MAXSIZE];
int cultrue[MAXSIZE][MAXSIZE],city_cul[MAXSIZE]; //前者 记录文化之间的排斥关系,后面的巨鹿某一个城市的文化
bool learn[105][105]; //这个数组 下标 i,j  . 表示走到 i 号城市 j文化  是否学习,学习了为 true;void init()// 初始化邻接表;
{memset(first,-1,sizeof(first)); ntotal=0;
}void addedge(int s,int t,int val) //添加边函数
{edge[ntotal].s=s,edge[ntotal].t=t,edge[ntotal].val=val;knext[ntotal]=first[s];first[s]=ntotal;ntotal++;
}
bool check(int pre,int cul) //判断 前一个城市 pre 的文化
{if(learn[pre][cul]) return false; // 如果当前文化之前已经学过 返回falsefor(int i=1; i<=K; i++){if(learn[pre][i]==true&&cultrue[cul][i]) return false; //如果上一个状态学过的文化 与 当前要学的排斥 false}return true; //否则 true
}
int spfa() //下面是  SPFA 模板 不懂上面有链接或者百度;
{queue<int>q;bool in_queue[200];int dis[200];for(int i=0; i<=110; i++)dis[i]=INF;memset(in_queue,0,sizeof(in_queue));memset(learn,0,sizeof(learn));dis[S]=0;q.push(S);in_queue[S]=1;learn[S][city_cul[S]]=1;while(!q.empty()){int k,x=q.front();q.pop();in_queue[x]=0;k=first[x];while(k+1){int to=edge[k].t;if(dis[x]+edge[k].val<dis[to]&&check(x,city_cul[to])){learn[to][city_cul[to]]=true;for(int jj=1;jj<=K;jj++){if(learn[x][jj]) learn[to][jj]=1;else learn[to][jj]=0;}dis[to]=dis[x]+edge[k].val;if(!in_queue[to]){in_queue[to]=1;q.push(to);}}k=knext[k];}}if(dis[T]==INF) return -1;else return dis[T];
}
int main()
{init();scanf("%d%d%d%d%d",&N,&K,&M,&S,&T);for(int i=1; i<=N; i++){scanf("%d",&city_cul[i]);}for(int i=1; i<=K; i++){for(int j=1; j<=K; j++)scanf("%d",&cultrue[i][j]);}for(int i=0; i<M; i++){int s,t,w;scanf("%d%d%d",&s,&t,&w);addedge(s,t,w);addedge(t,s,w);}cout<<spfa()<<endl;return 0;
}

Vijos P1794 文化之旅相关推荐

  1. 文化之旅(dijstra)

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. NOIP2012 普及组 T4 文化之旅

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

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

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

最新文章

  1. gitlab提交合并_notification - 如何把gitlab项目中的提交、PUSH、合并请求的通知发送到邮箱...
  2. sed、grep、awk
  3. vc实现透明位图,透明背景
  4. DecimalFormat 类
  5. iOS之深入解析类加载的底层原理:分类如何加载到类以及分类和类的配合使用
  6. maven-settings.xml的那些事
  7. WDM驱动程序入门(很详细)
  8. ios 各种锁的使用性能比较
  9. 26元买4500斤脐橙,农民淘宝店被主播带头薅亏700万,“羊毛党”太狠了!
  10. IntelliJ 一键添加双引号
  11. ido - 0.2 发布
  12. linux项目实验ppt下载,实验一Linux系统的使用.ppt
  13. app防止被抓包,包括Fiddler,Charles,HttpCanary等工具
  14. 【Java】GUI图形化界面中,setBounds()中参数的含义
  15. 苹果自带的APP下载分析统计工具
  16. 使用python生成文字视频
  17. (web前端网页制作课作业)使用HTML+CSS制作非物质文化遗产专题网页设计与实现
  18. python路径、工作路径、文件路径问题、改变当前路径
  19. 99%没用过的奇怪网站,黑科技应用网站推荐
  20. 计算机图形学 第6章 三维变换与投影

热门文章

  1. 量子计算机量子信息研讨会,2015全国量子信息与量子计算机前沿研讨会在我校召开...
  2. 各种神经网络的应用领域,神经网络技术及其应用
  3. Linux运维基本功(贰)---Linux系统的目录结构
  4. 自定义mui的索引列表indexedList(可用作通讯录)详细用法
  5. MyBatis映射文件如何给数据库的int类型字段“插入”string类型记录
  6. libusb ubuntu
  7. VisualSVN server下载安装
  8. HBase批量写入数据
  9. python bins分箱,划分数值区间
  10. windows重装系统