problem descriptioninput那麼這個地區的交通便捷程度p為:
現在我們知道了該地區的n個點,以及若干條有向邊,求該地區的交通便捷程度p。6
第一行輸入乙個正整數n,表示該地區的點數。output接下來輸入n行,每行輸入n個整數。第i行第j個數g[i]j表示從i號點到j號的有向路徑長度。如果這個數為-1,則表示不存在從i號點出發到j號點的路徑。
對於100%的資料,4<=n<=300
輸出乙個整數,表示這個地區的交通便捷程度。sample input
4sample output0 1 -1 -1
-1 0 1 -1
-1 -1 0 1
1 -1 -1 0
#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...