2020NOI Online 1入門組 題目詳解

2022-09-22 03:21:07 字數 1158 閱讀 7400

本來是打算動態規劃做的,後來發現一位巨佬直接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。在滿足以上條件...