标签:
                                        搜索图结构
最短路
                                   
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; // 如果当前文化之前已经学过 返回false
for(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. [最短路]P1078 文化之旅

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

  2. 洛谷 P1078 文化之旅

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

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

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

  4. 洛谷P1078 文化之旅

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

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

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

  6. code1316 文化之旅

    文化之旅的本质是最短路问题,只不过添加了一个文化排斥,仅需要做最短路时判断一下是否排斥即可 因为数据较小,采用了Floyd算法,以下是代码,关键部分附注释: #include<iostream& ...

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

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

  8. 【Floyd】文化之旅

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

  9. 文化之旅(dijstra)

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

随机推荐

  1. 实现Activity的滑动返回效果

    介绍 在知乎client上看到了这样的效果.左滑Activity能够返回到上一界面.非常适合单手操作. 找了非常久,最终在github上看到了SwipeBackLayout这个开源项目.地址: htt ...

  2. UVa11234 表达式

    题意:题目意思是给出后缀表达式.能够通过栈来计算表达式的值,即转化为中缀表达式. 然后如果如今不用栈.而是用队列来操作.即每遇到一操作符时.进行两次pop和一次push.(这里注意,先pop出来的作为 ...

  3. Unity光滑与粗糙的材质——相似于生锈的金属表面

    纹理是在Photoshop中制作的,终于效果则是在Unity里得到的.这样的类型的材质.在3D游戏中非经常见.

  4. 增加录像时间戳水印、 camera框架介绍

    http://blog.csdn.net/mirkerson/article/details/38920107 http://blog.csdn.net/jimbo_lee/article/detai ...

  5. 目标检测之harr---角点检测harr 的opencv实现

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/29356187 作者:毛星云(浅墨) ...

  6. ANALYSIS AND EXPLOITATION OF A LINUX KERNEL VULNERABILITY (CVE-2016-0728)

    ANALYSIS AND EXPLOITATION OF A LINUX KERNEL VULNERABILITY (CVE-2016-0728) By Perception Point Resear ...

  7. 【BZOJ1064】[Noi2008]假面舞会 DFS树

    [BZOJ1064][Noi2008]假面舞会 Description 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择 ...

  8. Java类加载器(死磕5)

    Java类加载器(  CLassLoader )  死磕5:  自定义一个文件系统classLoader 本小节目录 5.1. 自定义类加载器的基本流程 5.2. 入门案例:自定义文件系统类加载器 5 ...

  9. mysql给一张表新增字段,并设置该字段为外键

    首先给usercategory表新增libraryid字段: alter table usercategory add libraryid varchar(50) 修改picturelibrary表的 ...

  10. SVN在myeclipse中新建地址的时出现被拒绝

    新建资源库地址: 控制台提示信息: svn: connection refused by the server svn: connection refused by the server Connec ...