乙個圖中,對於每一條邊有兩個權值:路費和時間,我們要找一條從源點出發到終點的路,在這條路的時間不超過給定時間的基礎上,找到路費最少的路。
如果按照普通的最短路,會因為有乙個時間的限制而找不到正確的解。
找不到正確的解的原因就是對於每個點只能存乙個時間,然而我們可能在多個不同時間到達乙個點,不一定哪個時間會得到答案,後來的可能會把原來的覆蓋掉,覆蓋掉的就可能是正確的解。
按照這個想法,我們可以對於每乙個點,儲存每乙個時間到達的情況。也就是存花費的陣列變成乙個二維陣列。
第一維表示第幾個點,第二維表示在什麼時間到達這個點。
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處。二叉堆有兩種 最大堆和最小堆。最大堆中,除根結點外 其無父結點 每個結點的關鍵字都...