Vijos P1794 文化之旅
标签:
搜索图结构
最短路
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 文化之旅的更多相关文章
- [最短路]P1078 文化之旅
题目描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一 种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不 同的国家可能有相同的文化.不同 ...
- 洛谷 P1078 文化之旅
P1078 文化之旅 题目描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不同的国家可能 ...
- 洛谷 P1078 文化之旅 解题报告
P1078 文化之旅 题目描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不同的国家可能 ...
- 洛谷P1078 文化之旅
P1078 文化之旅 1.1K通过 3.6K提交 题目提供者洛谷OnlineJudge 标签NOIp普及组2012 难度普及+/提高 时空限制1s / 128MB 提交 讨论 题解 最新讨论更多讨 ...
- java算法 蓝桥杯 文化之旅
问题描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不同的国家可能有相同的文化.不同文化 ...
- code1316 文化之旅
文化之旅的本质是最短路问题,只不过添加了一个文化排斥,仅需要做最短路时判断一下是否排斥即可 因为数据较小,采用了Floyd算法,以下是代码,关键部分附注释: #include<iostream& ...
- AC日记——文化之旅 洛谷 P1078
文化之旅 思路: 暴搜,倒搜: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 105 #define max ...
- 【Floyd】文化之旅
[NOIP2012]文化之旅 题目描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一 种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不 ...
- 文化之旅(dijstra)
2012_p4 文化之旅 (culture.cpp/c/pas) 时间限制: 1 Sec 内存限制: 128 MB提交: 43 解决: 16[提交][状态][讨论版][命题人:外部导入] 题目描述 ...
随机推荐
- 【css】设置div位于浏览器的最底层,离用户最远
有时候切换发现某块div一直悬浮在最上层,怎么设置div位于浏览器的最底层.离用户最远? <style> .in{ z-index: -1; } </style> 然后引用in ...
- List<InvestInfoDO> invest = advertiseDao6.qryInvestInfo(InvestInfoDO1);怎样获得list的实体类;
List<InvestInfoDO> invest = advertiseDao6.qryInvestInfo(InvestInfoDO1); 怎样获得List的实体类呢,就是怎样获得I ...
- windows 平台 ffmeg h264 硬编码
本文讲述windows 平台下ffmpeg如何利用intel media SDK 进行 h264硬编码(测试版本为3.2.2). ffmeg硬编编码的流程与软件编码流程相同,唯一不同的地方在初始化en ...
- node.js如何读取MySQL数据
先安装mysql模块. node.js默认安装时,模块文件放在 /usr/local/lib/node_modules 这个目录下,为了便宜管理,模块还是统一安装到这里好. $ cd /usr/loc ...
- 如何重建一个损坏的调用堆栈(callstack)
原文作者:Aaron Ballman原文时间:2011年07月04日原文地址:http://blog.aaronballman.com/2011/07/reconstructing-a-corrupt ...
- 使用 kexec 快速重启 Linux
http://www.ibm.com/developerworks/cn/linux/l-kexec/ 简介: 即使您的工作不要求您每天多次重新启动您的 Linux 机器,等待系统启动也实在是一件枯燥 ...
- socketserver模块的使用
import socketserver class MyTCPhandler(socketserver.BaseRequestHandler): def handle(self): # print(s ...
- kubernetes故障现场一之Orphaned pod
系列目录 问题描述:周五写字楼整体停电,周一再来的时候发现很多pod的状态都是Terminating,经排查是因为测试环境kubernetes集群中的有些节点是PC机,停电后需要手动开机才能起来.起来 ...
- wpf中的样式与模板
1.WPF样式类似于Web应用程序中的CSS,在WPF中可以为控件定义统一的样式(Style).样式属于资源的一种,例如为Button定义统一的背景颜色和字体: <Window.Resource ...
- SAM4E单片机之旅——5、LED呼吸和PWM
PWM在高频情况下,一个很好的用处就是通过控制占空比来控制输出的功率,比如控制风扇转速.LED灯的亮度等.这次就利用PWM的中断功能,动态改变脉冲的占空比,来实现呼吸灯的效果. 一.实现思路 PWM可 ...