問題描述
小明和小芳出去鄉村玩,小明負責開車,小芳來導航。
小芳將可能的道路分為大道和小道。大道比較好走,每走1公里小明會增加1的疲勞度。小道不好走,如果連續走小道,小明的疲勞值會快速增加,連續走s公里小明會增加s
2的疲勞度。
例如:有5個路口,1號路口到2號路口為小道,2號路口到3號路口為小道,3號路口到4號路口為大道,4號路口到5號路口為小道,相鄰路口之間的距離都是2公里。如果小明從1號路口到5號路口,則總疲勞值為(2+2)2+2+22=16+2+4=22。
現在小芳拿到了地圖,請幫助她規劃乙個開車的路線,使得按這個路線開車小明的疲勞度最小。
輸入格式
輸入的第一行包含兩個整數n, m,分別表示路口的數量和道路的數量。路口由1至n編號,小明需要開車從1號路口到n號路口。
接下來m行描述道路,每行包含四個整數t, a, b, c,表示一條型別為t,連線a與b兩個路口,長度為c公里的雙向道路。其中t為0表示大道,t為1表示小道。保證1號路口和n號路口是連通的。
輸出格式
輸出乙個整數,表示最優路線下小明的疲勞度。
樣例輸入
6 71 1 2 3
1 2 3 2
0 1 3 30
0 3 4 20
0 4 5 30
1 3 5 6
1 5 6 1
樣例輸出
76樣例說明
從1走小道到2,再走小道到3,疲勞度為52=25;然後從3走大道經過4到達5,疲勞度為20+30=50;最後從5走小道到6,疲勞度為1。總共為76。
80分.. 賽後還沒想怎麼優化.. 以後再解決吧
#includeusingnamespace
std;
const
long
long inf =1e18;
intn,m;
struct
node;
struct
edge
};vector
g[510][2
];long
long d[510
];priority_queue
que;
long
long p2(long
long
a)int
solve());
while(!que.empty() ));}}
for(int i=0;i1].size();i++)); }}
} return
d[n];
}int
main ()
); g[b][t].push_back();
}cout
<< solve()
0;
}
ccf 行車路線
問題描述 小明和小芳出去鄉村玩,小明負責開車,小芳來導航。小芳將可能的道路分為大道和小道。大道比較好走,每走1公里小明會增加1的疲勞度。小道不好走,如果連續走小道,小明的疲勞值會快速增加,連續走 s公里小明會增加 s2的疲勞度。例如 有5個路口,1號路口到2號路口為小道,2號路口到3號路口為小道,3...
CCF行車路線
首先這道題沒寫出來,困擾了好久,也看過了別人的 都是運用迪傑斯特拉和弗洛伊德相結合,但是我不是很理解,要再深入理解一下這兩個演算法。期間用了記憶化搜尋,得了六十分 用了求出每條路徑再計算每條路徑值,超時,加了最優性剪枝,也只有三十。先記下這道題,回頭再寫。include include define...
CCF行車路線
題目鏈結 注意事項 dev c 宣告 檔案才能使用memset函式 最短路演算法一定要先初始化好相關的陣列變數,將相應的值初始化為最大值 題目最終所求的結果一般都很大,最好使用 long long 型別。一定要先測試一遍程式再提交 最開始這道題我想用兩張圖同時用floyd演算法過一遍,最後發現這種想...