本來是打算動態規劃做的,後來發現一位巨佬直接if語句做了!!!
#include using namespace std;
int main()
if(n<6&&n!=4&&n!=3)
ans=n/14;
n%=14;
if(n<6&&n!=4&&n!=3&&n!=0)
ans--,n+=14;
if(n==0)
首先用 floyd 演算法求出兩兩之間最短路,然後在 m 條邊中列舉一條邊修改,得到乙個矩陣 m 。其中 \(m_\) 表示從 i 出發到 j 最多修改 1 次道路費用的最短路。
重新定義矩陣乘法 \(c=a\times b\) 為 \(c_=\min\limits_k\+b_\}\),在這種定義下,\(m\times m\) 就是任意點到任意點最多修改兩次道路費用的最短路。那麼答案顯而易見,求出 \(m^k\) 即可。因為該運算滿足結合律,所以可以用快速冪優化。
#include using namespace std;
typedef long long ll;
const ll inf = 0x3f3f3f3f3f3f3f3f;
const int n = 100;
typedef ll matrix[n][n];
int sz;
ll a[n][n];
void matrix_mul(matrix a, matrix b, matrix res) }}
for (int i = 0; i < sz; i++)
}}void matrix_pow(matrix a, ll p, matrix res)
}while (p)
}struct edge b[2505];
int main() ;
a[u][v] = min(a[u][v], (ll)w);
}for (int k = 0; k < n; k++) }}
matrix c;
for (int i = 0; i < n; i++) }}
matrix_pow(c, k, c);
printf("%lld\n", c[0][n - 1]);
return 0;
}
NOI Online 1 入門組 魔法
全網都是矩陣快速冪,我只會倍增dp 其實這題與 acwing 345.牛站 還是比較像的,那題可以矩陣快速冪 倍增,這題也行。先 floyd 預處理兩點之間不用魔法最短距離 d 複雜度 o n 3 然後預處理兩點之間至多用乙個魔法的最短距離 w 初始為 w d 列舉 i,j 和一條邊 u,v,t w...
NOI Online 1 提高組 序列
luogu p6185 noi online 1 序列 將其轉化為圖論題。定義 u,v 為 a i 所代表的點 u v 為 b i 所代表的點 對於操作 2 將其視為一種權值搬運的操作,從 u 到 v 或者反過來轉移點權。那麼我們對 u,v 和 u v 連一條無向邊,顯然對於乙個連通塊內的所有點都可...
NOI Online 1 入門組 文具訂購
description 小明的班上共有 n 元班費,同學們準備使用班費集體購買 3 種物品 圓規,每個 7 元。筆,每支 4 元。筆記本,每本 3 元。小明負責訂購文具,設圓規,筆,筆記本的訂購數量分別為 a,b,c,他訂購的原則依次如下 n元錢必須正好用光,即 7a 4b 3c n。在滿足以上條件...