刷題集 傑杰的女性朋友

2021-08-28 02:17:31 字數 1235 閱讀 7503

題意:傑杰是魔法界的一名傳奇人物。他對魔法具有深刻的洞察力,驚人的領悟力,以及令人嘆為觀止的創造力。自從他從事魔法競賽以來,短短幾年時間,就已經成為世界公認的實力最強的魔法選手之一。更讓人驚嘆的是,他幾乎沒有借助外界力量,完全憑藉自己的努力達到了普通人難以企及的高度。在最近的世界魔法奧林匹克競賽上,他使用高超的魔法本領,一路過關斬將,在最後時刻一舉擊敗了前冠軍「旅行者」,獲得了魔法界最高的榮耀:女神獎盃!女神獎盃可不是乙個普通的獎盃,她能夠幫傑傑實現乙個願望。

傑杰本著實事求是的態度,審時度勢,向女神獎盃提出了自己的願望:想要乙個女性朋友。

傑杰的願望實現了,可是女性朋友卻和他不在乙個城市。傑杰想要知道:如果要到達女性朋友的所在城市,有多少種方案供他選擇?

傑杰所在的世界有n個城市,從1到n進行編號。任意兩個城市都通過有向道路連線。每個城市u有k個入點權:$in[1],in[2]...in[k],有k個出點權:ou[1],ou[2]...ou[k]。對於任意兩個城市(u,v)(u可以等於v),u到v的道路條數為(ou[1] \times in[v][1]+ou[2] \times in[v][2]+...+ou[k] \times in[v][k])條。傑杰有m次詢問,每次詢問由三元組(u,v,d)構成,詢問從u城市通過不超過d條道路到達v$城市的方案數。

為了溫柔的傑杰和他的女性朋友的美好未來,幫助他解答這個問題吧。

發現暴力矩陣快速冪一次就要n^3,但發現這個矩陣是由n*k和k*n兩個矩陣相乘所得,更換中間乘的順序快速冪裡就變成k*k的矩陣,再乘上剛開始的n*k,最後一次不要全乘,就算要知道答案的那位即可。而因為要知道的是小於等於d步,新建乙個點接受從v點來的答案及上一次答案即可。

#pragma gcc optimize(3,"inline","ofast")

#includeusing namespace std;

const int n=1010,m=65,k=25;

const int mod=1e9+7;

int n,k,m,ot[n][k],in[k][n],tp[n][k];

struct mat

void init1()

};mat operator *(const mat x,const mat y)

mat qpow(mat x,int y)

return res;

}int main()

++k,++n;

scanf("%d",&m);

while(m--)

}

BZOJ3583 傑杰的女性朋友 矩陣

有乙個 n 個點構成的有向圖。對於每乙個點 i 給定兩組引數,每組引數分別有 k 個值。這兩組引數分別記做 in i 1 cdots k out i 1 cdots k 從點 i 連到點 j 的邊數定義為 sum k in i t times out i t m 組詢問,每次詢問從 點 x 走到點 ...

BZOJ3583 傑杰的女性朋友 矩陣快速冪

時間限制 10s 空間限制 256mb 傑杰是魔法界的一名傳奇人物。他對魔法具有深刻的洞察力,驚人的領悟力,以及令人嘆為觀止的創造力。自從他從事魔法競賽以來,短短幾年時間,就已經成為 世界公認的實力最強的魔法選手之一。更讓人驚嘆的是,他幾乎沒有借助外界力量,完全憑藉自己的努力達到了普通人難以企及的高...

python刷題 並查集

class unionfind def init self self.co 0 用於記錄群的個數 self.parent 索引是每個節點本身,值是每個節點的父節點 self.size 用於記錄每個群的節點數目 def find self,x while self.parent x x self.pa...