【一道来自老师的题的题解】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条羊肠小道,每条连接两座 ...
随机推荐
- sh_18_字符串文本对齐
sh_18_字符串文本对齐 # 假设:以下内容是从网络上抓取的 # 要求:顺序并且居中对齐输出以下内容 poem = ["\t\n登鹳雀楼", "王之涣", & ...
- PHP处理kafka消息队列
在安装php-kafka 扩展后,就可以开始编写 php 消费消息的脚本了,php-rdkafka 扩展提供了几种消息处理的方式 低级方式(Low level) 这种方式没有消费组的概念 <?p ...
- 2、dubbo基础知识
1.简介 2.dubbo架构 3.dubbo环境搭建 注意:cmd命令都是在bin目录的地址栏直接输入 xxx.cmd 4.配置dubbo-admin 步骤一: 步骤二: 步骤三: 步骤四: 步骤五: ...
- [题解] [SCOI2010] 生成字符串
题面 题解 考虑到直接求合法方案不好求, 我们转化为用总方案减去不合法方案 总方案就是\(\binom{n+m}{m}\), 即在\(n+m\)个位置中放\(n\)个数 我们将初始的空序列看做\((0 ...
- Struts2中的ModelDriven机制及其运用、refreshModelBeforeResult属性解决的问题
1.为什么需要ModelDriven? 所谓ModelDriven,意思是直接把实体类当成页面数据的收集对象.比如,有实体类User如下: package cn.com.leadfar.struts2 ...
- Retrofit 使用简介
一,简介 Retrofit 是目前使用广泛的 Http Client 框架,它适用于 Android 和 Java. 但需要注意的是,Retrofit 本身并不是一个网络请求框架,而是一个网络请求框架 ...
- mysql 日常操作-DDL
1 修改字段类型 需求修改表字段类型 alter table 表名 modify column 修改的字段(列名) 类型(修改的类型) ALTER TABLE sys_entry_item m ...
- Nginx-rtmp之 ngx_rtmp_send.c 文件分析
1. 简述 1.1 RTMP 消息类型 /* RTMP message types */ #define NGX_RTMP_MSG_CHUNK_SIZE 1 #define NGX_RTMP_MSG_ ...
- .NET DLL 保护措施详解(非混淆加密加壳)
为什么要保护DLL,我就不多说了,各人有各人的理由.总的来说,就是不想核心逻辑泄露及授权验证被破解两大方面的因素.市面上的混淆加密工具对.NET源码保护的效果天差地别,很多网上下到的混淆工具破解版对. ...
- 二、WebSphere Application Server上部署war包并访问
进入我们was服务器控制台之后我们直接按照下图操作: 2.选择要上传的war包,下一步 3.一直下一步,步骤4注意填好“上下文根”,然后继续下一步,直到完成. 4.点击保存到主配置 5.应用程序> ...

