p2371 國家集訓隊 墨墨的等式
同餘最短路,考慮直接用最小的代價拼出來在膜最小 \(a_i\) 意義下的餘數。然後不停地累加最小的 \(a_i\)(一下稱它 \(a_\)) 就行了。
正確性:假定 \(i,j,k\) 為膜 \(a_\) 下的餘數,令 \(i+j \equiv k (\mod a_)\) 那麼顯然 \(i+j = t \cdot a_ + k\) (\(t\) 為任意非負整數)
那麼在 \(k + t \cdot a_\) 一定可以全覆蓋 \((i+j) + t \cdot a_\)
#include #include #include #include #include using namespace std;
typedef long long ll;
const ll maxn = 6e6+10;
const ll maxm = 5e5+10;
struct edge e[maxn];
ll a[maxm], n, head[maxm], cnt = -1, vis[maxm], dis[maxm], l, r, ans;
void add(ll, ll, ll);
void spfa(ll);
int main()
printf("%lld\n", ans);
return 0;
}void spfa(ll st) }}
}}void add(ll x, ll y, ll v)
最短路構造 P2371 國家集訓隊 墨墨的等式
更加感性的理解就是求乙個dis i 表示由n個 a i 求和 modt 為 i 的最小值 這樣就可以先跑一遍最短路,算出dis,然後從0到t 1走一遍,算出在bmin bmax有多少數就行了 includeusing namespace std define pli pairconst int ma...
P2371 國家集訓隊 墨墨的等式 同餘最短路
傳送門 題意 思路 乙個同於最短路的板子題,初始的時候值為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 的意義...
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 作為 ...