题:https://www.luogu.org/problem/P3115

题意:给出起点A,终点B,N条路线,下面没俩行一个路线,第一行是俩个数,第一个为这条路线的花费,第二个为这条路线经过的点数n,第二行即为n个整数表示这条路径;

分析:1、题目有说如果要跳转航线就要花费被跳往航线的的费用,所以单单连一条中转的边是错的;

   2、题目范围1000,所以我们暴力建边,但也要建得有思路,对于每一条航线,如果你一直在这条航线上走,花费都是不变的(即为这条航线的cost),所以我们可以认为,对于这条航线的每一个点 i 都可以直接花费cost到 i 后面的点 j ,所以就预处理最小花费和经 过的点数,再添加图的边;

   3、最后spfa一下就好,花费为第一优先级,经过的点数为第二优先级;

#include<bits/stdc++.h>
using namespace std;
inline int read(){
int sum=,x=;
char ch=getchar();
while(ch<''||ch>''){
if(ch=='-')
x=;
ch=getchar();
}
while(ch>=''&&ch<='')
sum=(sum<<)+(sum<<)+(ch^),ch=getchar();
return x?sum:-sum;
}
inline void write(int x){
if(x<)
putchar('-'),x=-x;
if(x>)
write(x/);
putchar(x%+'');
}
typedef long long ll;
const int inf=0x3f3f3f3f;
const ll INF=1e18;
const int M=1e3+;
int maxx=,tot,head[M],vis[M],a[M];
ll dis[M][],cost[M][M],path[M][M];
struct node{
int v,nextt;
ll cost,w;
}e[M*M];
void addedge(int u,int v,ll w,ll cost){
e[tot].v=v;
e[tot].w=w;
e[tot].cost=cost;
e[tot].nextt=head[u];
head[u]=tot++;
}
void spfa(int s,int t){
for(int i=;i<=;i++)
dis[i][]=INF;
queue<int>que;
que.push(s);
dis[s][]=;
while(!que.empty()){
int u=que.front();
que.pop();
vis[u]=;
for(int i=head[u];~i;i=e[i].nextt){
int v=e[i].v;
if(dis[v][]>dis[u][]+e[i].w){
dis[v][]=dis[u][]+e[i].w;
dis[v][]=dis[u][]+e[i].cost;
if(!vis[v]){
vis[v]=;
que.push(v);
}
}
else if(dis[v][]==dis[u][]+e[i].w){
if(dis[v][]>dis[u][]+e[i].cost)
dis[v][]=dis[u][]+e[i].cost;
}
}
}
if(dis[t][]==INF)
printf("-1 -1\n");
else
printf("%lld %lld\n",dis[t][],dis[t][]);
}
int main(){
int A=read(),B=read(),t=read();
memset(head,-,sizeof(head));
for(int i=;i<=;i++)
for(int j=;j<=;j++)
cost[i][j]=inf;
maxx=;
while(t--){
int w=read(),n=read();
for(int i=;i<=n;i++)
a[i]=read(),maxx=max(maxx,a[i]);
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++)
if(cost[a[i]][a[j]]>w){
cost[a[i]][a[j]]=w;
path[a[i]][a[j]]=j-i;
}
}
for(int i=;i<=maxx;i++)
for(int j=;j<=maxx;j++)
if(cost[i][j]<inf){
addedge(i,j,cost[i][j],path[i][j]);
}
spfa(A,B);
return ;
}

Cow Routing(最短路spfa)的更多相关文章

  1. 最短路模板(Dijkstra & Dijkstra算法+堆优化 & bellman_ford & 单源最短路SPFA)

    关于几个的区别和联系:http://www.cnblogs.com/zswbky/p/5432353.html d.每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个(草儿家到 ...

  2. L - Subway(最短路spfa)

    L - Subway(最短路spfa) You have just moved from a quiet Waterloo neighbourhood to a big, noisy city. In ...

  3. BZOJ4992 [Usaco2017 Feb]Why Did the Cow Cross the Road 最短路 SPFA

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ4992 题意概括 在一幅n*n的地图上,Amber从左上角走到右下角,每走一步需要花费时间t,每走完 ...

  4. BZOJ 1631: [Usaco2007 Feb]Cow Party( 最短路 )

    这道题和蔡大神出的今年STOI初中组的第二题几乎一模一样... 先跑一遍最短路 , 再把所有边反向 , 再跑一遍 , 所有点两次相加的最大值即为answer --------------------- ...

  5. POJ 3268 Silver Cow Party 最短路

    原题链接:http://poj.org/problem?id=3268 Silver Cow Party Time Limit: 2000MS   Memory Limit: 65536K Total ...

  6. ACM/ICPC 之 最短路-SPFA+正逆邻接表(POJ1511(ZOJ2008))

    求单源最短路到其余各点,然后返回源点的总最短路长,以构造邻接表的方法不同分为两种解法. POJ1511(ZOJ2008)-Invitation Cards 改变构造邻接表的方法后,分为两种解法 解法一 ...

  7. POJ 1847 Tram --set实现最短路SPFA

    题意很好懂,但是不好下手.这里可以把每个点编个号(1-25),看做一个点,然后能够到达即为其两个点的编号之间有边,形成一幅图,然后求最短路的问题.并且pre数组记录前驱节点,print_path()方 ...

  8. 【POJ】3255 Roadblocks(次短路+spfa)

    http://poj.org/problem?id=3255 同匈牙利游戏. 但是我发现了一个致命bug. 就是在匈牙利那篇,应该dis2单独if,而不是else if,因为dis2和dis1相对独立 ...

  9. 【wikioi】1269 匈牙利游戏(次短路+spfa)

    http://www.wikioi.com/problem/1269/ 噗,想不到.. 次短路就是在松弛的时候做下手脚. 设d1为最短路,d2为次短路 有 d1[v]>d1[u]+w(u, v) ...

随机推荐

  1. 阿里云-容器服务之集群服务 k8s(Jenkins+gitlab+k8s的devops)- 04

    配置jenkins和gitlab: 1.进入jenkins,新增一个项目,demo-piepeline,创建好,点击配置, 2 .设置镜像地址的命名空间: 3.设置镜像的名字 4.设置代码的分支或者t ...

  2. caffe-fasterrcnn程序理解

    faster-rcnn 结构杂谈  参考博客:::https://www.cnblogs.com/longriyao/p/5832274.html http://www.cnblogs.com/cha ...

  3. 华为荣耀magic book(锐龙版)安装ubuntu系统

    荣耀magic book锐龙版性价比很高,前段时间在朋友推荐下我自己也入手了一台.机器整体感觉不错,续航时间长(办公.无线上网5-6小时吧),速度快,买的时候4300,现在已经降到4000以下了,也算 ...

  4. D10 基本数据类型(各种职业的技能分析) 主要为 int 和 str

    在python中具有魔法的  职业  类型 召唤每种职业  在pychar 中 打出该职业的名称 按住Ctrl 光标在该职业名称上 点击就能看该职业的技能 1   数字   int a = " ...

  5. LINUX的ssh免密码配置

    本篇将介绍LINUX的ssh免密码配置. 本篇中的有三台主机: 192.168.1.110 master.com.cn  主机192.168.1.111 salver1.com.cn192.168.1 ...

  6. 用数组来实现Stack

    1:Stack特点 stack:栈,是一种特殊的数据结构,有着先入后出的特点(first in last out).stack中栈底始终不变,只有一端能变化.栈顶在有数据push的时候增大,有数据po ...

  7. linux系统终端介绍

    https://zhidao.baidu.com/question/174261014.html

  8. 吴裕雄--天生自然ShellX学习笔记:Shell 变量

    定义变量时,变量名不加美元符号($,PHP语言中变量需要),如: your_name="runoob.com" 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一 ...

  9. 01 语言基础+高级:1-8 File类与IO流_day10【缓冲流、转换流、序列化流】

    day10[缓冲流.转换流.序列化流] 主要内容 缓冲流 转换流 序列化流 打印流 教学目标 能够使用字节缓冲流读取数据到程序 能够使用字节缓冲流写出数据到文件 能够明确字符缓冲流的作用和基本用法 能 ...

  10. [前端] VUE基础 (6) (v-router插件、获取原生DOM)

    一.v-router插件 1.v-router插件介绍 v-router是vue的一个核心插件,vue+vue-router主要用来做SPA(单页面应用)的. 什么是SPA:就是在一个页面中,有多个页 ...