P2371 國家集訓隊 墨墨的等式 同餘最短路

2021-10-21 11:53:13 字數 1732 閱讀 2625

傳送門

題意:

思路:

乙個同於最短路的板子題,初始的時候值為0,所以設dis

[0]=

0dis[0]=0

dis[0]

=0,讓後選擇乙個最小的a[i

]a[i]

a[i]

作為b as

ebase

base

,跑一遍同餘最短路就好啦。跑完dis

[i]dis[i]

dis[i]

表示在模bas

ebase

base

的意義下能到達i

ii的最小數。讓後問的是區間裡的,轉化為[0,

r]−[

0,l−

1][0,r]-[0,l-1]

[0,r]−

[0,l

−1]就好啦。

//#pragma gcc optimize(2)

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define x first

#define y second

#define l (u<<1)

#define r (u<<1|1)

#define pb push_back

#define mk make_pair

#define mid (tr[u].l+tr[u].r>>1)

#define len(u) (tr[u].r-tr[u].l+1)

#define random(a,b) ((a)+rand()%((b)-(a)+1))

#define db puts("---")

using

namespace std;

//void rd_cre()

//void rd_ac()

//void rd_wa()

typedef

long

long ll;

typedef

unsigned

long

long ull;

typedef pair<

int,

int> pii;

const

int n=

1000010

,mod=

1e9+

7,inf=

0x3f3f3f3f

;const

double eps=

1e-6

;int n; ll l,r;

int a[n]

;ll dis[n]

;bool st[n]

;void

dijkstra()

}}}ll get

(ll x)

intmain()

/**/

P2371 國家集訓隊 墨墨的等式

p2371 國家集訓隊 墨墨的等式 同餘最短路,考慮直接用最小的代價拼出來在膜最小 a i 意義下的餘數。然後不停地累加最小的 a i 一下稱它 a 就行了。正確性 假定 i,j,k 為膜 a 下的餘數,令 i j equiv k mod a 那麼顯然 i j t cdot a k t 為任意非負整...

最短路構造 P2371 國家集訓隊 墨墨的等式

更加感性的理解就是求乙個dis i 表示由n個 a i 求和 modt 為 i 的最小值 這樣就可以先跑一遍最短路,算出dis,然後從0到t 1走一遍,算出在bmin bmax有多少數就行了 includeusing namespace std define pli pairconst int ma...

P2371 國家集訓隊 墨墨的等式(同餘最短路)

題目大意 給定 n nn 個整數 a ia i ai 和 l,r l,rl,r 求 i 1nai xi n n l,r sum na ix i n n in l,r i 1n ai x i n n l,r 有多少組非負整數解 題目分析 同樣是同餘最短路的模型,還是套路的取 a 1a 1 a1 作為 ...