YbtOJ 20085 困難遊走

2022-06-13 15:06:11 字數 986 閱讀 7153

下文設 \(\mathrm\) 為 \(t\),\(\mathrm\) 為 \(m\)。

首先因為必須走 \(t\) 的倍數步,所以我們先求出走 \(t\) 步點兩兩之間的最遠距離。

設 \(f[l][i][j]\) 表示走 \(k\) 步後 \(i\) 與 \(j\) 之間的距離,那麼

\[f[l][i][j]=\max(f[l][i][k]+f[k][j][1])

\]這部分時間複雜度是 \(o(n^3t)\) 的。如果願意的話可以矩陣乘法優化到 \(o(n^3\log t)\)。

然後後面很顯然只需要矩陣乘法 \(m\) 次即可。但是直接這樣做只可以求出嚴格走 \(m\) 秒後兩點之間的距離。

所以我們給終點與自己連乙個自環即可。

時間複雜度 \(o(tn^3(t+\log m))\)。

#include using namespace std;

const int n=500010,m=1000010;

int n,m,tot,ans0,ans1,head[2][n],maxd[2][n],deg[2][n],rk[n];

multisets;

struct edge

e[m*2];

void add(int from,int to,int id)

void topsort(int id) }}

int main()

topsort(0); topsort(1);

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

s.insert(maxd[0][i]);

ans1=2e9;

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

printf("%d %d\n",ans0,ans1);

return 0;

}

雷達裝置 Ybtoj

有n nn個建築物,第i ii個建築物在笛卡爾座標系上的座標為 xi yi x i,y i xi y i 你需要在x xx軸上安裝一些雷達,每個雷達的偵察半徑均為d dd,要求每個建築物都至少被乙個雷達偵測到,求最少要安裝幾個雷達。第一行兩個正整數n,d n,dn,d。接下來n nn行,第i ii行...

YBTOJ 電路維修

思路 乍一看這題,沒有bfs的頭緒 但是,我們想到了spfa 我們可以把地圖中的每個點看成方格,這樣就有 n 1 m 1 個方格 如果兩點之間有線聯通,那它們之間的邊權就是0,否則就為1 然後spfa就可以了 include include include using namespace std i...

YBTOJ 守衛挑戰

有 n 項任務,有乙個數 k 每一項任務成功的概率是 p i 這裡與原題目不同,原題目是百分之 p i 這裡相當於 p i frac 成功後會使 k 加上 a i 問至少成功 l 次且最後 k leq0 的概率是多少。資料範圍 0 leq k leq2000,0 leq l leq n leq 20...