Fishmonger SPOJ 二維最短路

2021-08-15 00:21:00 字數 1242 閱讀 1639

乙個圖中,對於每一條邊有兩個權值:路費和時間,我們要找一條從源點出發到終點的路,在這條路的時間不超過給定時間的基礎上,找到路費最少的路。

如果按照普通的最短路,會因為有乙個時間的限制而找不到正確的解。

找不到正確的解的原因就是對於每個點只能存乙個時間,然而我們可能在多個不同時間到達乙個點,不一定哪個時間會得到答案,後來的可能會把原來的覆蓋掉,覆蓋掉的就可能是正確的解。

按照這個想法,我們可以對於每乙個點,儲存每乙個時間到達的情況。也就是存花費的陣列變成乙個二維陣列。

第一維表示第幾個點,第二維表示在什麼時間到達這個點。

cost[i][j] = x的意思為:在時間 j 到達點 i 的最小化費為 x 。

剩下的就是基本的最短路了。

另外,因為本題資料量略小,dfs暴力也能出來,但是需要剪一下枝。

下面附上兩種做法的**

#include 

using

namespace

std;

const

int inf = 0x3f3f3f3f;

const

int maxv = 100;

int cnt, vertex, time_limit;

int cost[maxv][1010], map_cost[maxv][maxv], map_time[maxv][maxv];

bool vis[maxv][1010];

void spfa()}}

}}int main()

}cout

<< ans_cost << ' '

<< ans_time << endl;

}return

0;}

#include 

using

namespace

std;

const

int inf = 0x3f3f3f3f;

int toll[100][100], time[100][100], vis[100];

int vertex, latesttime, anstoll = inf, anstime = inf;

void dfs(int cur, int dis, int time)

return;

}for (int i = 1; i <= vertex; i++)

}}int main()

return

0;}

Python opencv 二 畫素運算 二

使用工具python3.x 使用庫numpy opencv,1.cv.bitwise and s1,s2 s1,s2為cv.imread函式返回的物件,表示將s1和s2的畫素進行邏輯與運算,函式會返回乙個物件。可以通過cv.imshow顯示出進行直觀感受。2.cv.bitwise or s1,s2 ...

大二第二學期周學習進度總結(二)

本週檢測的是從文件中讀取隨機數並得到最大連續子陣列,難度並不是很大,主要是需要使用biginteger來進行運算解決問題,我經常有這樣的感覺,就是很多情況下已經有了很成熟的技術,但是我們這些初學者僅僅是因為不知道,所以導致我們不知道這些方法如何解決,這個問題在課堂上困住了不少人,也許不少人是因為懶得...

二叉堆實現二

堆可以視為一棵完全二叉樹,樹的每一層都是被填滿的,最後一層可能除外,所以堆可以用陣列來表示。對於陣列中任意位置 i上的元素,其左兒子在位置 i 2 1 其右兒子在位置 i 2 2 上,其父節點在位置 i 1 2 1處。二叉堆有兩種 最大堆和最小堆。最大堆中,除根結點外 其無父結點 每個結點的關鍵字都...