博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【最短路】【spfa】CDOJ1633 去年春恨却来时,落花人独立,微雨燕双飞
阅读量:5901 次
发布时间:2019-06-19

本文共 1055 字,大约阅读时间需要 3 分钟。

对于S集合中的数,例如a1,考虑到如果x能够被表示出来,那么x+a1也一定能被表示出来

设d[r]为所有模a1余r的数中,能被表示出来的最小的数

用d[x]+ai去更新d[(x+ai)%a1],跑最短路即可

 

不用真的建出图来,因为图是完全的。否则会MLE。

#include
#include
#include
using namespace std;queue
q;int n,a[2010],m,dis[50010];bool inq[50010];void spfa(int s){ memset(dis+1,0x7f,sizeof(dis)); q.push(s); inq[s]=1; dis[s]=0; while(!q.empty()) { int U=q.front(); for(int i=2;i<=n;++i) if(dis[(U+a[i])%a[1]]>dis[U]+a[i]) { dis[(U+a[i])%a[1]]=dis[U]+a[i]; if(!inq[(U+a[i])%a[1]]) { q.push((U+a[i])%a[1]); inq[(U+a[i])%a[1]]=1; } } q.pop(); inq[U]=0; }}int main(){// freopen("b.in","r",stdin); scanf("%d",&n); for(int i=1;i<=n;++i){ scanf("%d",&a[i]); } spfa(0); int x; scanf("%d",&m); for(int i=1;i<=m;++i){ scanf("%d",&x); puts(dis[x%a[1]]<=x ? "YES" : "NO"); } return 0;}

转载于:https://www.cnblogs.com/autsky-jadek/p/6910313.html

你可能感兴趣的文章
[java,2017-12-01] 播放音频文件
查看>>
6大设计原则
查看>>
JavaScript与DOM的关系
查看>>
前后背景色及屏幕大小获取
查看>>
谈谈-TabPagerIndicator
查看>>
DrawerLayout和ActionBarDrawerToggle
查看>>
Unity3D--学习太空射击游戏制作(四)
查看>>
"无法从静态上下文中引用非静态变量,非静态方法"
查看>>
Mybatis中的模糊查询
查看>>
sscanf()分割字符数组
查看>>
Hibernate中使用Criteria查询及注解——( EmpCondition)
查看>>
SQL Server 关系表的创建、索引创建和数据插入
查看>>
美图技术博客之地理空间距离计算优化
查看>>
[转载]jquery的extend和fn.extend 区别
查看>>
【】windows phone7 学习笔记11——启动器与选择器
查看>>
Android 特殊用法
查看>>
【转载】ESFramework 4.0 性能测试
查看>>
远程服务器返回了意外响应 400 Bad Request
查看>>
数据库概论
查看>>
树莓派(linux)系统U盘只读更改
查看>>