GalaxyOJ 789 分治 弗洛伊德

2021-08-07 07:24:29 字數 1350 閱讀 4827

problem description

那麼這個地區的交通便捷程度p為:

現在我們知道了該地區的n個點,以及若干條有向邊,求該地區的交通便捷程度p。6

input

第一行輸入乙個正整數n,表示該地區的點數。

接下來輸入n行,每行輸入n個整數。第i行第j個數g[i]j表示從i號點到j號的有向路徑長度。如果這個數為-1,則表示不存在從i號點出發到j號點的路徑。

對於100%的資料,4<=n<=300

output

輸出乙個整數,表示這個地區的交通便捷程度。

sample input

4

0 1 -1 -1

-1 0 1 -1

-1 -1 0 1

1 -1 -1 0

sample output

#include 

#include

#define forl for(long long k=l; k<=mid; k++)

#define forr for(long long k=mid+1; k<=r; k++)

#define for(x) for(long long x=1; x<=n; x++)

#define copy for(i)for(j)d[p+1][i][j]=d[p][i][j]

#define inf (1<<29)

using

namespace

std;

long

long n,g,ans,d[23][500][500];

void he(long

long p,long

long l,long

long r)

long

long mid=l+r>>1;

copy;

forr for(i) for(j) //if (j!=k && j!=i)

d[p+1][i][j]=min(d[p+1][i][j],d[p+1][i][k]+d[p+1][k][j]);

he(p+1,l,mid);

copy;

forl for(i) for(j) //if (j!=k && j!=i)

d[p+1][i][j]=min(d[p+1][i][j],d[p+1][i][k]+d[p+1][k][j]);

he(p+1,mid+1,r);

}int main()

洛谷 3806 模板 點分治1 點分治

題目鏈結 題意 給定一棵有n個點的樹,多次詢問樹上距離為k的點對是否存在。k 1e7。依舊點分治。注意到k的大小是可以開陣列的,對於所有出現的路徑長度用sum記錄下來,容斥去重時可以直接減掉。但是如果像上面那樣記錄的話,複雜度是o n 2 的。資料弱還是能過 注意到詢問只有100個,每次calc 可...

洛谷P4721 分治FFT

分治fft 這個題一眼看上去就很像f f g f f g f f g,當自定義g 0 0g 0 0 g 0 0 的時候,題目中給出的f ff與這個卷積就只有常數項不同,因此考慮計算這個卷積。由於f ff的係數未知,因此不能直接卷積,如果逐項求,每次做一遍卷積那樣時間上承受不了。考慮分治,思路和cdq...

洛谷 P3806 模板 點分治1 點分治

傳送門 點分治!點分治.滾,雖然也沒有可以講的扣就完事了理解好就行 這裡講一下自己計算答案時的乙個部分,我們設tti tt i tti 表示到當前重心的距離為i ii的路徑是否存在 對於每個詢問q iq i qi 因為我們便利完前面的i 1 i 1i 1棵子樹,所以用ttq i itt ttqi i...