POI 2007 旅遊景點

2022-05-05 02:06:08 字數 1287 閱讀 4315

[題目鏈結]

[演算法]

首先,用dijkstra演算法求出2-k+1到每個點的最短路

然後,我們用f[s][i]表示目前停留城市集合為s,現在在城市i,最短的路徑

狀壓dp即可

[**]

#includeusing

namespace

std;

#define maxn 20010

#define maxm 200010

#define maxk 25

const

int inf =2e9;

const

int maxs = 1

<< 20

;int

i,j,x,n,m,k,u,v,w,tot,g,ts,ans,mask;

inthead[maxn],s[maxk];

intdist[maxk][maxn],f[maxs][maxk];

bool

visited[maxn];

struct

edge

e[maxm

<< 1

];inline

void addedge(int u,int v,intw);

head[u] =tot;

}inline

void dijkstra(int

s) dist[s][s] = 0

; q.push(make_pair(

0,s));

while (!q.empty())}}

}int

main()

scanf("%d

",&g);

for (i = 1; i <= g; i++)

for (i = 1; i <= k + 1; i++) dijkstra(i);

mask = (1

<< k) - 1

;

for (i = 0; i <= mask; i++)

}for (i = 2; i <= k + 1; i++)

f[0][1] = 0

;

for (i = 0; i <= mask; i++)

}

}ans =inf;

for (i = 1; i <= k + 1; i++) ans = min(ans,f[mask][i] +dist[i][n]);

printf(

"%d\n

",ans);

return0;

}

POI2007 旅遊景點atr BZOJ1097

分析 我們可以考慮,因為我們必須經過這些節點,那麼我們可以將它狀壓,並且我們因為可以重複走,只是要求停頓前後,不要求遍歷前後,那麼我們之間存一下點與點之間的最短路,之後每次轉移一下就可以了。f i s 表示在i節點,狀態為s,轉移 f i s maxe n 20 int head n cnt,f m...

bzoj1097 POI2007 旅遊景點atr

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

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

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