ccf 201712 4 行車路線

2021-08-27 11:47:29 字數 1880 閱讀 1265

試題編號: 201712-4

試題名稱: 行車路線

時間限制: 1.0s

記憶體限制: 256.0mb

問題描述:

問題描述

小明和小芳出去鄉村玩,小明負責開車,小芳來導航。

小芳將可能的道路分為大道和小道。大道比較好走,每走1公里小明會增加1的疲勞度。小道不好走,如果連續走小道,小明的疲勞值會快速增加,連續走s公里小明會增加s2的疲勞度。

例如:有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 7

1 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。

資料規模和約定

對於30%的評測用例,1 ≤ n ≤ 8,1 ≤ m ≤ 10;

對於另外20%的評測用例,不存在小道;

對於另外20%的評測用例,所有的小道不相交;

對於所有評測用例,1 ≤ n ≤ 500,1 ≤ m ≤ 10^5,1 ≤ a, b ≤ n,t是0或1,c ≤ 105。保證答案不超過10^6。

太菜了,本來就是最短路變形題,非被自己弄的特別複雜,主要不會處理連續的小路,所以需要儲存當前最短路徑上已形成的連續小路長度

注意:用long long 會爆

#include

using

namespace

std;

typedef

long

long ll;

const

int inf = 0x3f3f3f3f;

const

int n = 505;

#define pb push_back

typedef

struct nodenode;

vector

ve[n];

typedef

struct tree

}tree;

priority_queueque;

int dis[n];

bool vis[n];

int sum[n];

int n,m;

void dijistra()

); while(!que.empty())

else

if(cnt < dis[to]));

if(ve[id][i].t)else}}

}}int main()

); ve[b].pb((node));

}dijistra();

printf("%d\n",dis[n]);

return

0;}

CCF 201712 4 行車路線

思路 用兩個陣列維護到達某個點的最小大路距離和最小小路距離,注意結果中間過程可能爆int,不加long long 只有70分。有一種特殊情況就是通過走兩次大路,消除連續的小路值,這裡就是用兩個陣列維護的原因。include using namespace std const int maxn 100...

CCF201712 4 行車路線

一 題目大意 問題描述 小明和小芳出去鄉村玩,小明負責開車,小芳來導航。小芳將可能的道路分為大道和小道。大道比較好走,每走1公里小明會增加1的疲勞度。小道不好走,如果連續走小道,小明的疲勞值會快速增加,連續走 s公里小明會增加 s2的疲勞度。例如 有5個路口,1號路口到2號路口為小道,2號路口到3號...

ccf 2017 12 4行車路線

dijkstra變形,注意點 1.雖然題目說最終答案不會超過 10 6,但是中間過程可能超int啊 超了以後溢位變小,可能會影響到最後的解 所以還是乖乖用long long 儲存吧 2.圖的話 一定要考慮重邊和反向邊 還是只有70分 看到網上直接用sum i 記錄以當前小路為結尾的前面的連續小路之和...