弱省互測 0 t3

2022-05-11 21:20:50 字數 1123 閱讀 3451

要求給出下面**的答案然後構造輸入。

給乙個圖, n 個點 m 條邊 q 次詢問,輸出所有點對之間最大權值最小的路徑。

把每乙個詢問的輸出看成一條邊,建一棵最小生成樹。

給輸出,要求構造輸入使得用所給**執行後得到的輸出和給出的輸出相同。

所給**:n 次 dijkstra 求兩點間最短路

考慮一下貪心。

首先還是把每一條最短路的詢問結果看成一條邊,然後我們把這些邊排序。

對於每一條邊,如果這兩個點現在的距離大於這條邊的權值,我們就把這條邊加進去,更新所有點對

的距離。

正確性顯然。

現在證明這樣做邊數最短:

假設這樣得到的構造方案為 a ,假設還有一種構造方案是 b ,並且邊數更少。

那麼在 a 中肯定存在一條邊,在 b 中不存在。

於是在 b 中,這一條邊的兩個端點之間的距離,肯定大於 a 中這條邊的邊權。

否則如果相等的話,在 a 中就不會選擇這一條邊。

因此, b 這個方案肯定是非法的,也就是說, a 是邊數最少的構造方案。

#include using namespace std;

namespace one e[m];

int p[n], n, tot, m;

bool cmp(const e &a, const e &b)

void work()

for(int x=1; x<=10000; ++x)

}} }

}namespace three e[1000005];

bool cmp(const e &a, const e &b)

int j, rt, na;

for(j=0, na=a[csz].size(); j=1; --i)

a[r]=right;

vis[right]=1;

--right;

}} for(int i=1; i<=n; ++i)

while(vis[right])

a[i]=right;

--right;

} for(int i=1; i<=n; ++i)

for(int i=0; iint main()

弱省互測 0 t1

給乙個 n times m 的01網格,1不能走,從起點 1,1 走到 n,m 每次只能向下或向右走一格,問兩條不相交的路徑的方案數。n,m 1000 先考慮一條,再考慮去掉相交的情況。令 d a,b,c,d 表示從 a,b 走到 c,d 一條路徑的方案數,則可以簡單得到答案 ans d 2,1,n...

弱省互測 0 t2

給定兩個字串 a 和 b,求下面四個問題的答案 1.在 a 的子串中,不是 b 的子串的字串的數量。2.在 a 的子串中,不是 b 的子串行的字串的數量。3.在 a 的子串行中,不是 b 的子串的字串的數量。4.在 a 的子串行中,不是 b 的子串行的字串的數量。其中子串是指本質不同的子串,不同的位...

弱省互測 2 t3

給出 n 個01位元組和 m 個01位元組,要求用後者去匹配前者,兩個串能匹配當且僅當除了每個位元組末位不同,其他位都要相同。問匹配後者至少有多少個末位不同。1 le m le n le 2.5 times 10 5 首先我們可以用kmp計算出能匹配的位置,然後單獨考慮末位不同的情況。我們將末尾的位...