墨墨的等式
SOL
注意到:B<=1e12,而ai<=5e5,那么如果除掉一个ai也许能过
发现:a1x1+a2x2+…+anxn=B
->x1+a2/a1x2+…+an/a1xn=B/a1
假设:B%mod a1=w(a1为升序sort后的值)
则所有w+a1k(k为正整数)都可以由w转到,
则考虑0到a1-1共a1个点跑最短路,每次可以跑一条ai权值的边
则跑出来的dis[i]可以表示最小的可以构造出的w+a1*k
然后就可以统计答案了
代码:
#include<bits/stdc++.h>
#define int long long
#define re register
#define N 500005
using namespace std;
inline int rd(){
int data=0,w=1;static char ch=0;ch=getchar();
while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();
if(ch=='-')w=-1