题目翻译不好,这里给出一份

题目背景

Awson是某国际学校信竞组的一只大佬。由于他太大佬了,于是干脆放弃了考前最后的集训,开车(他可是老司机)去度假。离开学校前,他打开地图,打算做些规划。

题目描述

他发现整个地图中有N(1<=N<=20000)个地点。对于所有的路线,指定了其中K(1<=K<=200,K<=N)个地点作为收费站。他设计了M(1<=M<=20000 )种单向的路线,第i条路线从地点Ui至Vi收费为Di(1<=Di<=10000)。路线保证Ui或Vi至少有一个是收费站,且Ui≠Vi,任意两个地点至多有一条路线。现在Awson准备进行规划。共提出Q(1<=Q<=50000)个询问,其中第i个询问是从地点Ai至地点Bi。请帮助他计算,每个请求是否满足(是否从地点Ai至地点Bi有可行路线),并计算:能满足的度假询问的最小费用总和。

输入输出格式

输入格式:

第1行:四个整数N,M,K,Q

第2~M+1行:三个整数Ui,Vi,Di

第M+2~M+K+1行:收费站的编号X (0<=X<=N)

第M+K+2~M+K+Q+1:两个整数,度假询问Ai,Bi

输出格式:

第1行:能够满足的度假询问数

第2行:能满足的度假询问的最小费用总和

输入输出样例

输入样例:

3 3 1 2
1 2 10
2 3 10
2 1 5
2
1 3
3 1

输出样例:

1
20

说明

样例解释:

第1个询问,路线设计为1->2->3,费用为20
         第2个询问,无法满足

数据规模:

30%的数据有N<=100;

100%的数据有1<=N,M<=20000,1<=Q<=50000。

题解:

n很大,就算能O(1)求最短路也不行

但我们发现k很小,而且每条边至少有一个收费站

假设问u,v之间的最小距离,就是与u相邻的收费站与v的距离+边权

为包括u是收费站的情况,加入(u,u,0)边,修改部分会在代码中标记

题目转化为了求每个收费站到每个点的距离,用SPFA

复杂度为O(km+k*k)

询问部分可知一个点相邻的收费站最多为k,所以

询问复杂度为O(Q*k)

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct Node
{
int next,dis,to;
}edge[];
int head[],num,dist[][],q[],n,m,k,Q,p[],dis[][],b[],ans,cnt;
bool vis[];
void add(int u,int v,int d)
{
num++;
edge[num].next=head[u];
head[u]=num;
edge[num].to=v;
edge[num].dis=d;
}
void SPFA(int st,int j)
{int h,t,i;;
memset(dist[j],,sizeof(dist[j]));
memset(vis,,sizeof(vis));
q[]=st;
h=;t=;
dist[j][st]=;
while (h<t)
{
h++;
h%=;
int u=q[h];
vis[u]=;
for (i=head[u];i;i=edge[i].next)
{
int v=edge[i].to;
if (dist[j][v]>dist[j][u]+edge[i].dis)
{
dist[j][v]=dist[j][u]+edge[i].dis;
if (!vis[v])
{
t++;
t%=;
q[t]=v;
vis[v]=;
}
}
}
}
for (i=;i<=k;i++)
if (i!=j)
dis[j][i]=dist[j][p[i]];
}
int main()
{int i,j,u,v,d;
cin>>n>>m>>k>>Q;
edge[0].next=-1;
for (i=;i<=m;i++)
{
scanf("%d%d%d",&u,&v,&d);
add(u,v,d);
}
for (i=;i<=k;i++)
{
scanf("%d",&p[i]);
b[p[i]]=i;
}
for (i=;i<=k;i++)
{
SPFA(p[i],i);
}
while (Q--)
{
scanf("%d%d",&u,&v);
int s=1e9,x,y;
if (b[u]&&b[v])
{
s=dis[b[u]][b[v]];
}
else
for (i=head[u];i!=-1;i=edge[i].next)
{
82 if (b[u]) i=0;
83 if (i==0) x=u;
84 else x=edge[i].to;
if (b[x])
{
if (s>edge[i].dis+dist[b[x]][v])
s=edge[i].dis+dist[b[x]][v];
}
}
//cout<<s<<endl;
if (s<1e9)
ans+=s,cnt++;
}
cout<<cnt<<endl<<ans;
}

[USACO13DEC]假期计划(黄金)Vacation Planning (gold)的更多相关文章

  1. 洛谷P3094 [USACO13DEC]假期计划Vacation Planning

    题目描述 有N(1 <= N <= 200)个农场,用1..N编号.航空公司计划在农场间建立航线.对于任意一条航线,选择农场1..K中的农场作为枢纽(1 <= K <= 100 ...

  2. [USACO 13DEC]Vacation Planning(gold)

    Description Air Bovinia operates flights connecting the N farms that the cows live on (1 <= N < ...

  3. P4824 [USACO15FEB]Censoring (Silver) 审查(银)&&P3121 [USACO15FEB]审查(黄金)Censoring (Gold)

    P3121 [USACO15FEB]审查(黄金)Censoring (Gold) (银的正解是KMP) AC自动机+栈 多字符串匹配--->AC自动机 删除单词的特性--->栈 所以我们先 ...

  4. bzoj 4097: [Usaco2013 dec]Vacation Planning

    4097: [Usaco2013 dec]Vacation Planning Description Air Bovinia is planning to connect the N farms (1 ...

  5. hihoCoder#1698 : 假期计划 组合数

    题面:hihoCoder#1698 : 假期计划  组合数 题解: 题目要求是有序的排列,因此我们可以在一开始就乘上A!*B!然后在把这个序列划分成很多段. 这样的话由于乘了阶乘,所以所有排列我们都已 ...

  6. 洛谷P1360 [USACO07MAR]黄金阵容均衡Gold Balanced L…

    P1360 [USACO07MAR]黄金阵容均衡Gold Balanced L… 题目描述 Farmer John's N cows (1 ≤ N ≤ 100,000) share many simi ...

  7. 「USACO15FEB」「LuoguP3121」审查(黄金)Censoring (Gold)(AC自动机

    题目描述 Farmer John has purchased a subscription to Good Hooveskeeping magazine for his cows, so they h ...

  8. 洛谷 P1360 [USACO07MAR]黄金阵容均衡Gold Balanced L…

    P1360 [USACO07MAR]黄金阵容均衡Gold Balanced L… 题目描述 Farmer John's N cows (1 ≤ N ≤ 100,000) share many simi ...

  9. hihocoder #1698 假期计划 (排列组合+费马小定理+乘法逆元)

    Description 小Ho未来有一个为期N天的假期,他计划在假期中看A部电影,刷B道编程题.为了劳逸结合,他决定先拿出若干天看电影,再拿出若干天刷题,最后再留若干天看电影.(若干代指大于0)  每 ...

随机推荐

  1. oralce数据库常用到的一些sql命令(加字段注释,修改数据之类)

    最近开始接触oralce,整理了一下最近使用 pl/sql 常用到的一些sql命令 1.修改表中的数据 编写查询语句及条件,然后加上"FOR UPDATE","FOR U ...

  2. xcode进行代码覆盖率测试

    去年写的文章,搬到cnblog 本文所述的方法只对xcode5做过测试,xcode6是否可行尚未可知. 配置编译选项 首先请参考苹果官方的文档Configuring Xcode for Code Co ...

  3. 2017-2018-1 我爱学Java 第六七周 作业

    团队六七周作业 完善版需求规格说明书 制定团队编码规范 数据库设计 后端架构设计 TODOList 参考资料 完善版需求规格说明书 <需求规格说明书>初稿不足之处: 1.开发工具写错 2. ...

  4. AWS中,如果使用了ELB,出现outofservice

    平台:亚马逊AWS EC2 出现状况: 我创建了弹性平衡负载,也注册了实例,但是实例的状态一直是outofservice.为什么? 为什么会出现这个问题呢? 1:实例有问题: 2:负载平衡器创建的有问 ...

  5. typescript简介

    微软作为编译器狂魔一直有一个心病,就是改良JavaScript这种语法超级烂又很多人用的编程语言,于是TypeScript诞生了 先做个对比吧:   TS JS 语法严谨性 严谨 宽松 静态性 静态 ...

  6. Linq GroupBy

    //Linq //var result = from p in personList // group p by p.Id // into grouped // select new { Id = g ...

  7. python 内置函数之lambda-filter-reduce-apply-map

    (1)lambda lambda是Python中一个很有用的语法,它允许你快速定义单行最小函数.类似于C语言中的宏,可以用在任何需要函数的地方. 基本语法如下: 函数名 = lambda args1, ...

  8. kubernetes入门(06)kubernetes的核心概念(3)

    一.API 对象 API对象是K8s集群中的管理操作单元.K8s集群系统每支持一项新功能,引入一项新技术,一定会新引入对应的API对象,支持对该功能的管理操作.例如副本集Replica Set对应的A ...

  9. 单点登录实现机制:web-sso

    参考链接,感谢作者:https://zm10.sm-tc.cn/?src=l4uLj8XQ0IiIiNGckZ2TkJiM0ZyQktCZlo2Mi5uNmp6S0I/QysrJyszPztGXi5K ...

  10. Spring Security 入门(1-7)Spring Security - Session管理

    参考链接:https://xueliang.org/article/detail/20170302232815082 session 管理 Spring Security 通过 http 元素下的子元 ...