JZOJ 5279 香港记者

一句话题意:一个带点权边权的无向图,输出从1号点到n号点的最短路中字典序最小的一条路径
样例输入:
8 9
1 2 3 4 5 6 7 8
1 2 2
2 3 3
3 8 3
1 4 3
4 5 2
5 8 1
1 6 1
6 7 2
7 8 3
样例输出:
6
1 4 5 8
思路:
跑一边spfa(单源最快),更新条件改成(当前路径更短 or (当前路径和原路径相等 and 当前路径字典序更小)),直接开一个pre数组维护当前点的前继就好。
建议自己写队列,实现只要两分钟(因为代码短),而且不会被卡STL(实际上也没什么变态出题人会去卡一个queue),习惯第一。
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<vector>
#define ll long long
using namespace std;
struct edge{
int next,to,w;
edge(){
to=w=;next=-;
}
}a[];
int n,m,first[],bk[];
ll dis[];bool vis[];
ll pre[];
struct Queue{
int q[],head,tail;
Queue(int k){
head=;tail=;memset(q,,sizeof(q));
q[head]=k;
}
void push(int k){
if(dis[k]>dis[q[head]]) q[tail++]=k;
else q[--head]=k;
}
void pop(){
q[head++]=;
}
int top(){
return q[head];
}
bool empty(){
return (head==tail);
}
};
void spfa(){
Queue q(n);
vis[n]=;dis[n]=;pre[n]=n;
int u,v,w,i;
while(!q.empty()){
u=q.top();q.pop();vis[u]=;
for(i=first[u];~i;i=a[i].next){
v=a[i].to;w=a[i].w;
if(dis[v]>dis[u]+w||(dis[v]==dis[u]+w&&bk[pre[v]]>=bk[u])){
dis[v]=dis[u]+w;
pre[v]=u;
if(!vis[v]){
vis[v]=;q.push(v);
}
}
}
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
first[i]=-;dis[i]=0x3f3f3f3f3f3f3f;
scanf("%d",&bk[i]);
}
int t1,t2,t3;
for(int i=;i<=m;i++){
scanf("%d%d%d",&t1,&t2,&t3);
a[i].to=t1;a[i].next=first[t2];a[i].w=t3;first[t2]=i;
}
spfa();
printf("%lld\n%d ",dis[],bk[]);
int i=;
while(i!=n){
printf("%d ",bk[pre[i]]);i=pre[i];
}
}
JZOJ 5279 香港记者的更多相关文章
- [JZOJ5279]香港记者题解--最短路图
[JZOJ5279]香港记者题解--最短路图 题目链接 过 于 暴 力 分析 有一个naiive的想法就是从1到n跑最短路,中途建图,然后在图上按字典序最小走一遍,然而·这是不行的,你这样跳不一定能跳 ...
- JZOJ.5279【NOIP2017模拟8.15】香港记者
Description
- 【20161203-20161208】清华集训2016滚粗记&&酱油记&&游记
先挖坑(这个blog怎么变成游记专用了--) 已更完 #include <cstdio> using namespace std; int main(){ puts("转载请注明 ...
- UVa 11624 Fire!(BFS)
Fire! Time Limit: 5000MS Memory Limit: 262144KB 64bit IO Format: %lld & %llu Description Joe ...
- bzoj3531——树链剖分+动态开点线段树
3531: [Sdoi2014]旅行 Time Limit: 20 Sec Memory Limit: 512 MB Description S国有N个城市,编号从1到N.城市间用N-1条双向道路连 ...
- YYHS-怎样更有力气
题目描述 OI大师抖儿在夺得银牌之后,顺利保送pku.这一天,抖儿问长者:"我虽然已经保送了,但我的志向是为国家健康工作五十年.请问我应该怎样变得更有力气?" 长者回答:&quo ...
- 51Nod 1781 跑的比谁都快
香港记者跑的比谁都快是众所周知的常识. 现在,香港记者站在一颗有 n 个点的树的根结点上(即1号点),编号为 i 的点拥有权值 a[i] ,数据保证每个点的编号都小于它任意孩子结点的别号. 我们假定这 ...
- 【Codeforces 1000F】One Occurrence
题意:给一个序列,每次查询某个区间内一个只出现一次的数. 思路:线段树. 首先我们看只出现一次的本质是什么. 如果一个数\(x\)在\((l,r)\)中只出现了一次,那么它在其中第一次出现位置为\ ...
- BZOJ2671 Calc(莫比乌斯反演)
两个多月之前写的题,今天因为看到一道非常相似的题就翻出来了,发现完全不会,没救. 感觉这个题其实第一步是最难想到的,也是最重要的. 设d=gcd(a,b).那么a=yd,b=xd,且gcd(x,y)= ...
随机推荐
- 关于ACL中通配符掩码(反掩码)认识
ACL(Access Control List) 访问控制列表在作为数据包的过滤器以及在对指定的某种类型的数据包的优先级,起到了对某些数据包的优先级起到了限制流量的作用,减少了网络的拥塞. ...
- 用Java读取xml文件内容
在AXP中,DOM解析器是1 Document Builder类的一个实例,该实例由 DocumenBailderfactorv类负责创,步如下 DocumentBuilderFactory fa ...
- HTTP 响应时发生错误。这可能是由于服务终结点绑定未使用 HTTP 协议造成的。这还可能是由于服务器中止了 HTTP 请求上下文(可能由于服务关闭)所致。
第一种:无法序列化 DataTable.未设置 DataTable 名称. 第二种: 排除过程如下: 1.用WCF调试状态下的客户端调用ESB的Publish方法调用成功,证明ESB的推送是没有问题的 ...
- Pandas 数据结构Series:基本概念及创建
Series:"一维数组" 1. 和一维数组的区别 # Series 数据结构 # Series 是带有标签的一维数组,可以保存任何数据类型(整数,字符串,浮点数,Python对象 ...
- 12-optionBinding
1-创建一个空的dotnet mvc网站 2- 创建appsettings.json文件, 这文件会默认被绑定 { "ClassNo": "1", " ...
- 笔记-docker-2安装(centos6.5环境)
笔记-docker-2安装(centos6.5环境) 1. centos6.5安装docker 1.1. 升级内核 安装docker,官方文档要求linux kernel至少3.8以上 ...
- Python locale 多语言模块和我遇到的坑
Table of Contents 1. locale遇到的问题 1.1. locale 简介 1.1.1. 什么是locale 1.1.2. locale 相关命令 1.2. Python loca ...
- PHP.21-商品信息管理
商品信息管理 在线增删改查和图片信息管理 主要技术:文件上传.图片缩放.数据库基本操作 思路: 1.设计并创建数据库 库名:demodb 表名:goods 编号(id) 名称(name) 商品类型(t ...
- PaaS服务之路漫谈(一)
此文已由作者尧飘海授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. PaaS服务之路漫谈(一) 1983年,SUN公司提出的网络即计算的理念:2006年亚马逊(Amazon)推 ...
- 剑指Offer - 九度1350 - 二叉树的深度
剑指Offer - 九度1350 - 二叉树的深度2013-11-23 00:54 题目描述: 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的 ...