BZOJ 1097 旅遊景點atr

2022-04-29 09:09:05 字數 1725 閱讀 5753

fgd想從成都去上海旅遊。在旅途中他希望經過一些城市並在那裡欣賞風景,品嚐風味小吃或者做其他的有趣的事情。經過這些城市的順序不是完全隨意的,比如說fgd不希望在剛吃過一頓大餐之後立刻去下乙個城市登山,而是希望去另外什麼地方喝下午茶。幸運的是,fgd的旅程不是既定的,他可以在某些旅行方案之間進行選擇。由於fgd非常討厭乘車的顛簸,他希望在滿足他的要求的情況下,旅行的距離盡量短,這樣他就有足夠的精力來欣賞風景或者是泡mm了^_^. 整個城市交通網路包含n個城市以及城市與城市之間的雙向道路m條。城市自1至n依次編號,道路亦然。沒有從某個城市直接到它自己的道路,兩個城市之間最多只有一條道路直接相連,但可以有多條連線兩個城市的路徑。任意兩條道路如果相遇,則相遇點也必然是這n個城市之一,在中途,由於修建了立交橋和下穿隧道,道路是不會相交的。每條道路都有乙個固定長度。在中途,fgd想要經過k(k<=n-2)個城市。成都編號為1,上海編號為n,而fgd想要經過的n個城市編號依次為2,3,…,k+1. 舉例來說,假設交通網路如下圖。fgd想要經過城市2,3,4,5,並且在2停留的時候在3之前,而在4,5停留的時候在3之後。那麼最短的旅行方案是1-2-4-3-4-5-8,總長度為19。注意fgd為了從城市2到城市4可以路過城市3,但不在城市3停留。這樣就不違反fgd的要求了。並且由於fgd想要走最短的路徑,因此這個方案正是fgd需要的。

第一行包含3個整數n(2<=n<=20000),m(1<=m<=200000),k(0<=k<=20),意義如上所述。以下m行,每行包含3個整數x,y,z,(1<=x

只包含一行,包含乙個整數,表示最短的旅行距離。

8 15 4

1 2 3

1 3 4

1 4 4

1 6 2

1 7 3

2 3 6

2 4 2

2 5 2

3 4 3

3 6 3

3 8 6

4 5 2

4 8 6

5 7 4

5 8 6

32 3

3 43 5

19分析:

先跑k次最短路找出前k

個點兩兩之間的最短路徑,將這些路徑縮成邊,然後在k

個點上做狀壓dp。

常數跪qaq,壓著時間過orz

**:

1 #include 2 #include 3

#define maxn 20010

4#define maxm 400010

5int

t[maxm], p[maxm], w[maxm], la[maxn], e;

6int n, m, k, l, a, b, c, lim[1

<< 21];7

int dis[23][maxn], dp[23][1

<< 21

], end;

8int q[maxm * 10

], h, r, v[maxn], no;

9 inline void ins (int

from, int to, int

weight)

1017 inline int min (int a, int

b)18

21void spfa (int

s)2237}

38 h++;39}

40 dis[s][k + 2] =dis[s][n];41}

42int dfs (int i, int

st)43

52int

main ()

53

bzoj1097 旅遊景點atr

fgd想從成都去上海旅遊。在旅途中他希望經過一些城市並在那裡欣賞風景,品嚐風味小吃或者做其他的有趣的事情。經過這些城市的順序不是完全隨意的,比如說fgd不希望在剛吃過一頓大餐之後立刻去下乙個城市登山,而是希望去另外什麼地方喝下午茶。幸運的是,fgd的旅程不是既定的,他可以在某些旅行方案之間進行選擇。...

bzoj1097 POI2007 旅遊景點atr

description fgd想從成都去上海旅遊。在旅途中他希望經過一些城市並在那裡欣賞風景,品嚐風味小吃或者做其他的有趣 的事情。經過這些城市的順序不是完全隨意的,比如說fgd不希望在剛吃過一頓大餐之後立刻去下乙個城市登山,而是希望去另外什麼地方喝下午茶。幸運的是,fgd的旅程不是既定的,他可以在...

楊柳青旅遊景點 天津西青旅遊景點精選推薦

天津西青旅遊發展很快,從乙個遊客的認知感覺應該是這幾個區里較快的,而且每乙個在天津都是亮點,用當下的話來說,都是網紅熱點,在網上各大平台也都有推薦,而且只要提前購票都會有優惠,有時各個 平台都做些 啊補貼呀,實惠多些要提早預定能遇到,當天不一定有,這樣很好,十分適合提前計畫出行,能得到 上的獎勵優待...