【一道来自老师的题的题解】equip——奇妙的最短路
这道题真的第一眼完全想不到是最短路啊!!!!!!!!
感谢DR大佬讲解!!!!!90°鞠躬 =u=
暂时没有评测网址,(因为需要special judge)敬请期待
机房另一大佬JYY题解,可以对比参照(说不定就会了呢)<-点这个
(她的博客里有一些问题答疑不懂得去看看哈)
题面:
分析过程依旧来源于老师

为什么可以连图的证明过程忽略(因为我不会
这张图基本就是所有能被表示的数,求出的最短路就是最小能被表示的数,由于它们都对 a[1] 取模,根据这点可以用已求出的数据计算出每种碎片的使用情况,(我们默认能多用 a[1] 就多用)这题是“任意一种方案即可”,所以我们不用考虑“用 n 个 a[ j ] 可以表示 a[ i ] ”的情况
参考代码可能会便于理解思路(代码有超级超级详细的注释哦真的不看看嘛)
/*数组变量解释:
dis 存放最短路值,pre 存放每个价值所用的碎片编号, vis , sum 代码中都有详细解释
*/
#include<bits/stdc++.h>
#define A 20001
#define N 5001
using namespace std;
typedef long long ll;
struct node
{
int x; ll v;
bool operator < (const node &oth) const
{
return v > oth.v;
}//重载运算符实现大根堆
};
priority_queue<node>q;
int pre[A], n, m, K, vis[A];
ll a[N], dis[A], sum[N];
ll getin()
{
ll s = ; char c = getchar();
while (c < '' || c > '') c = getchar();
while (c <= '' && c >= '') s = s * 10ll + c - '', c = getchar();
return s;
}//快读忽略
void dijkstra()
{
for (int i = ; i < a[]; i++) dis[i] = 1e18;
dis[] = ;
q.push((node) {, });
//赋初值
while (!q.empty())
{
int u = q.top().x;//这是当前的点
q.pop();
if (vis[u]) continue;
vis[u] = true;
// vis数组用来判断是否更新
//参考dijsktra
for (int i = ; i <= n; i++)
{
int v = (u + a[i]) % a[];//目前的需要更新的点
if (dis[u] + a[i] < dis[v])
{
dis[v] = dis[u] + a[i];//判断是否需要更新
pre[v] = i; //这个正在更新的点边权(a[j]) 的编号 J
q.push((node){v, dis[v]});//加入堆
}
}
}
}
int main() {
//freopen("equip.in", "r", stdin);
//freopen("equip.out", "w", stdout);
scanf("%d%d%d", &n, &m, &K);
for (int i = ; i <= n; i++) a[i] = getin();
dijkstra();
for (int i = ; i <= m; i++) {
ll x = getin();
if (x < dis[x % a[]]) printf("No\n");//判断无法被兑换的情况
else {
printf("Yes");
if (K == ) {
for (int j = ; j <= n; j++) sum[j] = ;
//sum[j] 表示的是每种碎片需要的数量
sum[] += (x - dis[x % a[]]) / a[];
//需要的 a[1] 碎片数量
// x-dis[x%a[1]] 是刨掉a[1]以外碎片使用的总价值
while (x % a[])
{
sum[pre[x % a[]]]++;//这个位置的碎片数++;
x = ((x - a[pre[x % a[]]]) % a[] + a[]) % a[];
//把当前的碎片和a[1]刨掉剩下的需要价值(那么长主要是保证其精度不要在意)
}
for (int j = ; j <= n; j++) printf(" %I64d", sum[j]);
//简简单单的输出,不用的话就是输出0 (反正任意一种情况都能过2333)
}
printf("\n");
}
}
return ;//防我自己抄袭
}
好的就是这些,由于目前没找着原题,所以无法评测,看不懂可以找我
ありがとうございます
【一道来自老师的题的题解】equip——奇妙的最短路的更多相关文章
- CodeM美团点评编程大赛复赛 做题感悟&题解
[T1] [简要题意] 长度为N的括号序列,随机确定括号的方向:对于一个已确定的序列,每次消除相邻的左右括号(右左不行),消除后可以进一步合并和消除直到不能消为止.求剩下的括号的期望.\(N \l ...
- 【BZOJ1036】[ZJOI2008] 树的统计Count(一道可怕的模板题:树剖+线段树)
点此看题面 题解 这真的只是一道模板题:一个树链剖分套上一个线段树(令我窒息的组合). 既然是模板题,那就直接上代码吧. 代码 #include<bits/stdc++.h> #defin ...
- HDU100题简要题解(2060~2069)
这十题感觉是100题内相对较为麻烦的,有点搞我心态... HDU2060 Snooker 题目链接 Problem Description background: Philip likes to pl ...
- HDU100题简要题解(2050~2059)
HDU2050 折线分割平面 题目链接 Problem Description 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目.比如,一条折线可以 ...
- 洛谷P2918 [USACO08NOV]买干草(一道完全背包模板题)
题目链接 很明显的一道完全背包板子题,做法也很简单,就是要注意 这里你可以买比所需多的干草,只要达到数量就行了 状态转移方程:dp[j]=min(dp[j],dp[j-m[i]]+c[i]) 代码如下 ...
- 又一道区间DP的题 -- P3146 [USACO16OPEN]248
https://www.luogu.org/problemnew/show/P3146 一道区间dp的题,以区间长度为阶段; 但由于要处理相邻的问题,就变得有点麻烦; 最开始想了一个我知道有漏洞的方程 ...
- [真题] 一道 vsftp 运维题
一道 vsftp 运维题 一.前言 在 V 站上凑巧看到了好友发的求助帖,五天时间一个理他的都没有.哈哈哈~ 废话不多说,我们来试试. 二.题目 这里我们假设存在这样的场景: 网络内有普通用户 ade ...
- QDUOJ 一道简单的数据结构题 栈的使用(括号配对)
一道简单的数据结构题 发布时间: 2017年6月3日 18:46 最后更新: 2017年6月3日 18:51 时间限制: 1000ms 内存限制: 128M 描述 如果插入“+”和“1”到 ...
- 洛谷P2832 行路难 分析+题解代码【玄学最短路】
洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...
随机推荐
- Uva 10129 Play on Words(欧拉路)
一些秘密的门包含一个非常有趣的单词拼图.考古学家们必须解决的问题 它打开那门.因为没有其他的方式来打开大门,这个谜是非常重要的 我们. 每扇门上都有大量的磁性板.每一个盘子上都有一个字 它.板块必须以 ...
- HGOI 20190828 题解
Problem A 数学题 设数论函数$f(x)$表示$x(x ∉ Prime)$的次大因数, 给出$l,r$求出$\sum\limits_{i=l,i ∉ Prime} ^r f(i)$ . 对于$ ...
- flask框架(十一): 蓝图
蓝图用于为应用提供目录划分: 一:上目录结构 二:上代码 <!DOCTYPE html> <html lang="en"> <head> < ...
- P1598 垂直柱状图
输入格式: 四行字符,由大写字母组成,每行不超过100个字符 输出格式: 由若干行组成,前几行由空格和星号组成,最后一行则是由空格和字母组成的.在任何一行末尾不要打印不需要的多余空格.不要打印任何空行 ...
- 【知识库】-数据库_MySQL之基本数据查询:子查询、分组查询、模糊查询
简书作者:seay 文章出处: 关系数据库SQL之基本数据查询:子查询.分组查询.模糊查询 回顾:[知识库]-数据库_MySQL常用SQL语句语法大全示例 Learn [已经过测试校验] 一.简单查询 ...
- 微信小程序_(表单组件)checkbox与label
微信小程序组件checkbox官方文档 传送门 微信小程序组件label官方文档 传送门 Learn 一.checkbox组件 二.label组件与checkbox组件共用 一.checkbox组件 ...
- [CSP-S模拟测试]:B(DP+数学)
题目传送门(内部题45) 输入格式 第一行$3$个整数$n,m,P$.第二行$m$个整数,表示$m$次询问. 输出格式 一行$m$个整数表示答案. 样例 样例输入1: 2 4 40 1 2 3 样例输 ...
- flask中models设计
1. 自关联 class Comment(db.Model): __tablename__ = 'albumy_comment' id = db.Column(db.Integer, primary_ ...
- R语言:读入txt文件中文文本出现乱码解决方案
下载安装 readr 因为使用内置函数 read.table() 读入应该是格式不符合要求会报错 library(readr) help(package="readr") 可以使用 ...
- 前世今生:Hive、Shark、spark SQL
Hive (http://en.wikipedia.org/wiki/Apache_Hive )(非严格的原文顺序翻译) Apache Hive是一个构建在Hadoop上的数据仓库框架,它提供数据的 ...

