【最短路】CDOJ1633 去年春恨却来时,落花人独立,微雨燕双飞

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

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

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

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

#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
queue<int>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;
}
时间: 2024-10-22 03:35:48

【最短路】CDOJ1633 去年春恨却来时,落花人独立,微雨燕双飞的相关文章

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

题意:给你n个数(n<2000)q(q<10000)个询问s,求n个数是否能取任意个数相加得到s 题解:一开始以为是数论写半天...可以把这些数分类,分成a[1]类,每一类的数可以由最小的数加上t个a[1]得到, 初始得到的数只能是0,每个点到0的距离为无穷大,每次更新最短路,SPFA跑的更快一点 #include <bits/stdc++.h> #define maxn 100010 using namespace std; int dis[maxn], n, a[maxn];

我最喜爱的宋词

临江仙 晏几道 梦后楼台高锁,酒醒帘幕低垂.去年春恨却来时,落花人独立,微雨燕双飞. 记得小苹初见,两重心字罗衣.琵琶弦上说相思,当年明月在,曾照彩云归. 苏轼 夜饮东坡醒复醉,归来仿佛三更.家童鼻息已雷鸣,敲门都不应,倚杖听江声. 长恨此身非我有,合适忘却营营.夜阑风静縠纹平,小舟曾此逝,江海寄余生. 晁冲之 忆昔西池池上饮,年年多少欢娱.别来不寄一行书,寻常相见了,犹道不如初. 安稳锦衾今夜梦,月明好渡江湖.相思休问定何如,情知春去后,管得落花无? 陈与义 忆昔午桥桥上饮,坐中多是豪英.长沟

[转]填词

奠基 诗词读多了,难免自己也想拿笔试试.人,尤其可不做而做的事都有所为.想试试的所为可以有多种.一种是附庸风雅,用大白话说是,让人看看,"我也能作旧诗.填词,可见是造诣高,多才多艺."另一种由野狐禅走入正经,是确有"故国(读仄声)平居有所思"之类或"为伊消得(读仄声)人憔悴"之类的情怀,读别人的,借他人酒杯浇自己块垒,不直接,或吃不饱,于是只好自己拿笔.还有一种,胃口更大,有情怀,抒发了,还不满足,立志要写得多,写得好,以期追踪李.杜,步武秦.周

奋斗吧,程序员——第三十六章 落花人独立,微雨燕双飞

什么什么,要我别倒下? 废话,不看着情敌们在我面前一个个倒下,然后踩着他们的尸体过去继续战斗,我怎么可能比他们先一刻倒下. 生命的意义在于不屈的抗争,只要情敌一天未清除,我们就不能退出战斗. 我们必须迎着夕阳勇往直前,正义在浪子们的心里点燃了一展明 灯,让鲜花洒满大地,让真爱充斥人间,那就是希望所在. 什么什么,要我退出? 废话,你见过我的刀出了刀鞘而不染血的吗,即使没有敌人的血,也必须有自己的血! 在我的脑海里只有仇人有资格变得刻骨铭心,其他的都无所谓,我就是忘乎所以我就是数典忘宗我就是粪土当

【最短路】【spfa】hdu6071 Lazy Running

给你一个4个点的环,问你从2号点出发, 再回到2号点,长度>=K的最短路是多少.环上的边长度不超过30000. 跑出来所有dis(2,j)以后,然后for一遍j,根据dis(2,j)+t*2*w>=K,解出来对于每个j而言最小的t,然后尝试更新答案即可.如果dis(2,j)已经大于等于K了,那直接用其尝试更新答案. 跟CDOJ1633很像. #include<cstdio> #include<queue> #include<algorithm> #inclu

hdu3461Marriage Match IV 最短路+最大流

//给一个图.给定起点和终点,仅仅能走图上的最短路 //问最多有多少种走的方法.每条路仅仅能走一次 //仅仅要将在最短路上的全部边的权值改为1.求一个最大流即可 #include<cstdio> #include<cstring> #include<iostream> #include<queue> #include<vector> using namespace std ; const int inf = 0x3f3f3f3f ; const

UESTC30-最短路-Floyd最短路、spfa+链式前向星建图

最短路 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的T-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗? Input 输入包括多组数据. 每组数据第一行是两个整数NN ,MM (N≤100N≤100 ,M≤10000M≤1000

ACM: HDU 2544 最短路-Dijkstra算法

HDU 2544最短路 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗? Input 输入包括多组数据.每组数据第一行是两个整数N.M(N<=100,M<

ACM/ICPC 之 昂贵的聘礼-最短路解法(POJ1062)

//转移为最短路问题,枚举必经每一个不小于酋长等级的人的最短路 //Time:16Ms Memory:208K #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<algorithm> using namespace std; #define INF 0x3f3f3f3f #define MAX 105 int lim, n; int p[M