p6190 [noi online 入門組]魔法
題目描述
分析這道題要求的是從1到\(n\)的最短路,其中有\(k\)次機會可以將一條邊暫時的變為相反數,一條邊可以走無數次
注意到無數次這個比較奇怪的要求,也就是說可以不考慮重複,那麼設\(a_\)表示從\(i\)到\(j\)用\(k\)次魔法的最小值,那麼顯然\(a_=min(a_+a_)\),即把\(i\)到\(j\)分為兩段,那麼首先對於\(k=0\)的情況,可以直接floyd解決,對於\(k=1\)可以列舉所有的邊解決,然後我們就得到了乙個矩陣m,我們顯然可以定義一種矩陣乘法\(a*b=min(a_+b_)\)符合我們上面推出來的轉移方程
那麼對於\(k\)的情況,即用矩陣快速冪求出\(m^k\)即可
**
#includeusing namespace std;
const int n=105;
struct node
a,b;
int n,m,k,edge[2505][3];
void input()
return;
}void prepare()
for(int i=1;i<=n;i++) b.matrix[i][i]=0;
for(int kk=1;kk<=m;kk++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
b.matrix[i][j]=min(b.matrix[i][j],min(a.matrix[i][j],a.matrix[i][edge[kk][0]]+a.matrix[edge[kk][1]][j]-edge[kk][2]));
// for(int i=1;i<=n;i++)
// return;
}node matrix_mul(node a,node b)
long long matrix_pow(node x,int y)
return tem.matrix[1][n];
}void work()
int main()
洛谷P3941入陣曲
給你乙個的 n m 矩陣,每個格仔裡都有乙個不超過 k 的正整數。詢問這個矩陣裡有多少個不同的子矩形中的數字之和是 k 的倍數?我們先考慮乙個簡化版的一維問題 給定乙個長度為 n 的序列,a 1 a 2 cdots,a n 如果某一段子串行的和為 k 的倍數,則稱其為 k 倍區間,求該序列中有多少個...
MOT RFS筆記 P1 引入
edx multi object tracking for automotive systems 課程筆記 p1引入 首先解釋一下為什麼要學習隨機有限集,最近學習多目標追蹤 mot 當目標數量很多的時候,傳統的點理論 就是用矩陣 會導致計算量大,對於未知和時變的目標數量也較難實現,而基於隨機有限集的...
洛谷P3128USACO最大流 樹上差分入門
一道樹上差分的入手好題,中文題面不再贅述 讀完題後,我們發現,答案就是圖中的點被經過的最多次數,即有多少條路徑經過它,暴力期望得分20 40分,正解是什麼呢?樹上差分 lca 沒錯,和差分的操作一樣,在區間的左端點加一,在右端點 1的位置減一,只不過放到了樹上,我們先預處理每個點的lca,之後我們發...