BZOJ2763 洛谷P4568飛行路線

2021-08-20 19:18:27 字數 1011 閱讀 9930

題目中文不再贅述直接開講

題目中要求最短,那麼肯定要跑最短路(我這裡用的玄學u優化spfa據說不優化會t,具體如何優化可以參考一下我的部落格,

玄學優化),那麼如何跑出不選一些邊的最短路呢?暴力列舉?顯然不是很現實,所以我們要引入乙個新的演算法叫做分層圖最短路,顧名思義,將乙個圖拆成若干個圖,每個圖中有若干個邊權值為0,但是如果拆成許多圖,那不就又成暴力了嗎?我們不妨換乙個思路想想,我們不需要拆圖,我們只需要記錄一下,到當前這個點,正常跑最短路,以及之前用過k次機會的最短路就好了 ,所以我們將最短路的dis陣列,變成dis[i][j],vis,變成vis[i][j],什麼含義呢,dis是表示到第i個點,用了j次機會的最短路,vis的含義也相同,然後實際跑spfa時,更新兩個值,假設當前點是由第j個點用了k次機會更新到的,那麼我們判斷k是不是小於題目給的限制,是的話就更新當前點用k+1次機會的最短路,然後再更新不用一次機會,也就是說到當前點還是用k次機會的最短路,好啦,就這些,具體的內容要結合**自己分析,並形成自己的碼風哦

**

//by acermo
#include#include#include#include#include#include#includeusing namespace std;

const int n=1e4+5;

const int m=1e5+10;

int st,ed;

int n,m,kpath;

int dis[n][15],vis[n][15];

struct edge

add;

vectorv[m];

struct fast

}now,t;//玄學優化

priority_queueq;

void spfa()

if (dis[go][now.k]>now.cost+pay&&!vis[go][now.k])}}

}int main()

spfa();

return 0;

}

洛谷P4568飛行路線

傳送門 主要思想就是分層圖。分層圖的意思是指,對於每乙個點,可能有多個狀態。那麼對於每種狀態,我們都用一張圖來儲存,那麼就得到了乙個三維的圖。沒一層都是一種狀態。從當前一層到下一層的辦法就是選擇一條邊為0。既然可以選k條,那麼總共就有k 1層。如上圖,無向圖中,有邊1 2,1 5,2 3,2 4,3...

洛谷 P2763 試題庫問題

問題描述 假設乙個試題庫中有n道試題。每道試題都標明了所屬類別。同一道題可能有多個類別屬性。現要從題庫中抽取m 道題組成試卷。並要求試卷包含指定型別的試題。試設計乙個滿足要求的組卷演算法。程式設計任務 對於給定的組卷要求,計算滿足要求的組卷方案。輸入格式 第1行有2個正整數k和n 2 k 20,k ...

洛谷 P2763 試題庫問題

源點向每個試題連容量為1的邊,試題向試題型別連容量為1的邊,試題型別向匯點連容量為本型別所需題數的邊.跑最大流 include include include include include include define pd i i 2 1 i 1 i 1 using namespace std ...