題意:給出乙個有向圖,通過每條邊花費的時間wi以及每條邊的通行時間[bi,ei],問起點到終點路上花費時間(到達時間-出發時間,時間預設最開始是0)最短是多少。
其實就是乙個加了限制條件的最短路,spfa可以做到,其實spfa是可以加很多擴充套件內容。
但是注意,由於有通行時間的存在,中途有可能需要等待,而答案要求是到達時間減去出發時間,所以這個等待要盡量放在開始之前,就是盡量晚出發。然而我們並不知道到底是哪個時間出發比較好,所以我們列舉這個出發時間,再用spfa求最短路。
d[i]表示到i的最短時間(加上出發前的等待時間,就是說d[s] = k,k是所列舉的出發時間,這樣d[i]值也就代表著走到i點時的時間),spfa中需要擴充套件的內容僅僅是在鬆弛條件中加上關於通行時間的特判:如果需要等待,那麼就要加上等待的時間。再說清楚點,原本是d[v] > d[u]+w的判斷變成了d[v] > max(d[u], b) + w && d[u]+w <= e,後一半是要保證在結束通行前可以通過這條邊,前一半裡的max就是,如果需要等待,那麼從u出發時間就是b而不是d[u],到達點v的時間d[v]就變成了從u出發的時間b加上通過這條邊本身需要的時間w。
#include #include #include #include #include using namespace std;
int n, m, s, t, ans = 1<<30, d[101], mn = 1<<30, mx;
bool inq[101];
vector g[101];
queue q;
struct edgee[1001];
void read()
}void spfa(int k)
} }
}int main()
if(ans <= 1e6) printf("%d", ans);
else printf("impossible");
}
poj1724 帶限制的最短路
題意 乙個人要從1點到n點,有m條邊可以走,走每條邊要花一些錢,這個人只有k的錢,問花的錢不多於k且能到n的最短路。spfa解決最短路,不過dist陣列要加一維,dist i j 表示從1走到了i花了j錢的最短路。感覺這時候就是個bfs include include include include...
POJ 1062 昂貴的聘禮 帶限制的最短路
題目鏈結 中文題目,就不說題意了.分析 很好的一道題。兩個關鍵 一是建圖,而是處理等級限制的問題。建圖的話,結點為每件物品,把探險者也看成乙個入度為零的節點,是n 1結點之一,我把他的標號設為0,探險者到其他物品的直接連線的權值為物品的原始 其他 i j的邊的權值為探險者獲得i後換j的 格。題目又要...
POJ 1192 限制條件最短路
通道在一定的時間開放,處理一下就是最短路了 strtok char,還是很好用的 strtok 用來將字串分割成乙個個片段。引數s指向欲分割的字串,引數delim則為分割字串中包含的所有字元。當strtok 在引數s的字串中發現引數delim中包涵的分割字元時,則會將該字元改為 0 字元。在第一次呼...