去年春恨却来时,落花人独立,微雨燕双飞

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)

Submit  Status
给你一个大小为n的集合S,集合里有n个互不相同正整数.
有q个询问,每次询问是否能选择S中的一些数字 ( 同一个数字可以选择多次,也可以任何数字都不选),使它们相加的和为m.

Input

第一行一个数n(1≤n≤2000),表示集合S的大小.
第二行n个数,第i个数ai(1≤ai≤50000)表示集合S中的第i个数.
第三行一个数q(1≤q≤10000),表示询问次数.
接下来q行,每行一个数m(0≤m≤1000000000),表示该次询问的数.

Output

每次询问输出一行,如果存在和为m的方法,输出YES,否则输出NO.

Sample input and output

Sample Input Sample Output
3                                   YES
2 4 9                            NO
4                                   YES
6                                   YES
7
18

25

Hint

对于第一个询问,存在2+2+2=6,所以输出YES
对于第一个询问,无法构造,输出NO
对于第三个询问,存在9+9=18,所以输出YES

对于第四个询问,存在2+2+4+4+4+9=25,所以输出YES

Source

2017 UESTC Training for Graph Theory

UESTC 1633 去年春恨却来时,落花人独立,微雨燕双飞

My Solution

题意:给出一个大小为n的集合S,集合里有n个互不相同正整数.
有q个询问,每次询问是否能选择S中的一些数字 ( 同一个数字可以选择多次,也可以任何数字都不选),
使它们相加的和为m.

Dijkstra+构造
对于S集合中的数,例如a1,考虑到如果x能够被表示出来,那么x+a1也一定能被表示出来。
故设d[r]为所有模a1余r的数中,能被表示出来的最小的数。
故可以表示出一个a1个节点a1*n条边的有向图。
d[0] = 0,丢入priority_queue<ii, vector<ii>, greater<ii>>,然后对于pq.top()的点连出的n条边进行松弛操作。
如果 d[u] + a[i] < d[(d[u] + a[i])] 则刷新并丢入队列。
跑出来的d[i],如果d[i] != INF则都是可以表示出来的。
对于每个询问判断 q >= d[q % a[1]]即可。
时间复杂度 O(mlogn)
空间复杂度 O(n), 不用存边。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
typedef long long LL;
typedef pair<int, int> ii;
const int MAXN = 2e3 + 8;
const int MAXM = 5e4 + 8;
const int INF = 1e9 + 8;
int a[MAXN], dis[MAXM];
bool vis[MAXM];
priority_queue<ii, vector<ii>, greater<ii>> pq;inline void dijkstra(int sz, int src)
{for(int i = 0; i < MAXM; i++){dis[i] = INF;}memset(vis, false, sizeof vis);dis[src] = 0;pq.push(ii(0, src));int u, v, w, d, i;while(!pq.empty()){u = pq.top().second;d = pq.top().first;pq.pop();if(vis[u]) continue;vis[u] = true;for(i = 1; i <= sz; i++){if(d + a[i] < dis[(d + a[i]) % a[1]]){dis[(d + a[i]) % a[1]] = d + a[i];pq.push(ii(d + a[i], (d + a[i]) % a[1]));}}}
}inline bool query(int x)
{if(x >= dis[(x % a[1])]) return true;else return false;
}int main()
{#ifdef LOCALfreopen("b.txt", "r", stdin);//freopen("b.out", "w", stdout);int T = 1;while(T--){#endif // LOCAL//ios::sync_with_stdio(false); cin.tie(0);int n, q, t, i;scanf("%d", &n);for(i = 1; i <= n; i++){scanf("%d", &a[i]);}dijkstra(n, 0);scanf("%d", &q);while(q--){scanf("%d", &t);if(query(t)) puts("YES");else puts("NO");}#ifdef LOCALcout << endl;}#endif // LOCALreturn 0;
}

Thank you!

------from ProLights

UESTC 1633 去年春恨却来时,落花人独立,微雨燕双飞 Dijkstra+构造相关推荐

  1. BZOJ 2407: 探险/BZOJ 4398: 福慧双修 dijkstra 构造

    2407: 探险 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 170  Solved: 95 [Submit][Status][Discuss] ...

  2. 晏几道 天涯 青砚1989

    晏几道:去年春恨却来时 酒醒长恨锦屏空  梦后楼台高锁,酒醒帘幕低垂.去年春恨却来时,落花人独立,微雨燕双飞.  记得小蘋初见,两重心字罗衣.琵琶弦上说相思,当时明月在,曾照彩云归.    --晏几道 ...

  3. UESTC 1607 大学生足球联赛 构造、蛇形安排赛程表

    大学生足球联赛 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit   ...

  4. UESTC 图论专题 A-D

    A:梦后楼台高锁,酒醒帘幕低垂 题目链接:http://acm.uestc.edu.cn/#/problem/show/1636 解法:首先,考虑到,我们需要找到一条路径,使它的最小边尽量大,最大边尽 ...

  5. 科大星云诗社动态20210309

    [诗人背后的故事--为情而活晏几道] 杜甫忧国,不顾妻子有孕离家而去:陆游孝顺,因为母亲反对就休掉唐婉:元白交好,两人唱和诗比给妻子的诗多得多--诗人虽写情,却未必重情.忠义礼孝,皆在情之上. 而历史 ...

  6. css 大于号 标签_CSS设计基础选择器篇

    点击上方 Java项目学习 ,选择 星标 公众号 重磅资讯.干货,第一时间送达 前言:如果将CSS样式应用于特定的网页对象上,需要先找到目标元素.在CSS样式中执行这一任务的部分被称为选择器. 1 标 ...

  7. 两宋词人Top10排排座

    第1名 北宋苏轼 苏轼,站在宋词巅峰的男人.他豪放词和婉约词双修,都达到了极高的境界.他的极品词篇有18首,是毫无疑问的"宋词第一人". 苏轼水平最高的3首词如下: <定风波 ...

  8. 古诗词推荐(一):春风十里扬州路,卷上珠帘总不如

    赠别二首·其一 杜牧 娉娉袅袅十三余,豆蔻梢头二月初. 春风十里扬州路,卷上珠帘总不如. 一剪梅·雨打梨花深闭门 唐寅 雨打梨花深闭门,孤负青春,虚负青春.赏心乐事共谁论?花下销魂,月下销魂. 愁聚眉 ...

  9. 《临江仙·梦后楼台高锁》——[宋]晏几道

    梦后楼台高锁,酒醒帘幕低垂.去年春恨却来时.落花人独立,微雨燕双飞. 记得小蘋初见,两重心字罗衣.琵琶弦上说相思.当时明月在,曾照彩云归.(蘋:通'苹') 转载于:https://www.cnblog ...

  10. 那些记在心里的经典诗词

    1.晏几道<临江先> 梦后楼台高锁,酒醒帘暮低垂. 去年春恨却来时,落花人独立,微雨燕双飞. 记得小苹初见,两重心字罗衣. 琵琶弦上说相思.当时明月在,曾照彩云归. 相思苦,相思恨,是苦是 ...

最新文章

  1. 你玩的音游可能真是AI生成的,Love Live!工作室发了篇论文,用AI节省50%作谱时间...
  2. 虚拟机批量安装LINUX,基于vmware workstation的 pxe + kickstart批量安装linux
  3. 这个代码应该怎么写???
  4. 【原型设计】第三节:Axure RP9 母版的使用说明以及操作教程
  5. 滴滴滴,ITester软件测试小栈所有资源放送!
  6. angular乱码_号外!Angular 中文文档已同步翻译至 7.0
  7. linux下组管理命令详解
  8. 【C语言】C语言小项目—贪吃蛇
  9. JAVAWEB开发之数据库简介、MySQL的安装与卸载(处理中文乱码)、以及MySQL语言(DDL、DML、DCL、DQL)的详解和使用
  10. Unix平台下的常用命令技巧之五 资源与性能
  11. 大众 mib android auto,【图】加入互联基因 体验大众第二代MIB多媒体_汽车之家
  12. 交换机、路由器模式层次简介
  13. Kali linux 2016.2(Rolling)中的payloads模块详解
  14. 习题 8-13 外星人聚会(Meeting with Aliens, UVa10570)
  15. matlab仿真转速波形为负,转速、电流双闭环直流调速系统的课程设计MATLAB仿真.docx...
  16. 最新最完整的全国省市级json数据
  17. 学习高等数学一学期对”高等”的感悟与体会
  18. WIN7键盘失灵解决方案
  19. 【HIKMICRO】海康威视H21Pro投屏使用方法
  20. layui 好看侧边栏(附Demo)

热门文章

  1. 微课在小学计算机教学中的应用,微课技术在小学信息技术课堂中的应用
  2. 新手如果写一个软件,应该是怎么一个流程?
  3. c语言中整型实型是什么,C语言中为何整型变量以实型变量输出为0?
  4. iOS问题记录 - Xcode 14安装低版本iOS模拟器
  5. 生成验证码时,验证码图片不显示,报错信息如下:Can‘t create output stream;Can‘t create cache file
  6. 2014年度江西省高等学校科技落地计划项目立项名单
  7. 《达芬奇•科学第一人》麦克•怀特
  8. u盘盘符不显示 win10_win10系统u盘不显示盘符的解决方法
  9. 2019年华为JAVA面试题系列
  10. 【第115期】零基础学做游戏制作_搭环境Unity hub