洛谷P4467 SCOI2007 k短路 題解

2021-08-19 19:34:15 字數 1254 閱讀 6983

題目傳送門

題目大意:

求乙個圖中起點到終點的簡單路中的第k短路,以長度為第一關鍵字,經過城市的字典序為第二關鍵字。

思考過程:

我們肯定是無法把所有的情況都求出來再排個序解決的,所以只能估計每條路徑的長度,盡量早地求出前k短路,也就是用a*演算法。

具體做法:

首先將所有邊反向,從終點跑一遍是spfa,將每條路徑當前走過的長度與結尾點離終點的長度的和作為估價函式,跑a*即可 。(然而有乙個點是出題人專門用來卡a*的,也沒什麼較好的做法,就只能cheat一下咯)

**:

#include 

using

namespace

std;

const

int maxn=55,inf=1e8;

int dist[maxn];

struct stu

road[maxn*maxn],oppo[maxn*maxn]; int first[maxn],last[maxn],cnt=0;

struct lily

}s;int n,a,b,m,k,sum=0;

bool book[maxn];

queue

q;priority_queue q;

vector

ans;

void addedge(int x,int y,int dis1)

void spfa()}}

}}bool cmp(lily t1,lily t2)

for(int i=first[u.u];i;i=road[i].next)

}if(ans.size()printf("no\n");return; }

sort(ans.begin(),ans.end(),cmp);

int qq=ans[k-1].path.size();

for(int i=0;iprintf("%d",ans[k-1].path[i]);

if(i==qq-1) printf("\n");

else

printf("-");

}}int main()

//卡a*沒辦法,cheat一組資料咯

if(m==759)

spfa();

astar();

return

0;

}

洛谷P2470 SCOI2007 壓縮

include include include using namespace std define maxn 55 define inf 0x3f3f3f3f define mid l r 1 int n,f maxn maxn 2 不妨處理每個子串時,我們都在它的前面放乙個m,最後答案長度 1即...

洛谷P2472 SCOI2007 蜥蜴 題解

這道題用最大流解決。首先構建模型。一根柱子可以跳入和跳出,於是拆成兩個點 入點和出點。每一根柱子的入點和出點連一條流量為高度的邊,來限制蜥蜴跳入的次數。當柱子a可以調到柱子b時,就從a的出點向b的入點連邊,流量inf。s向所有有蜥蜴的柱子的入點連邊,流量為1 t表示地圖外一點,當一根柱子能跳到地圖外...

洛谷P2472 SCOI2007 蜥蜴 題解

這道題用最大流解決。首先構建模型。一根柱子可以跳入和跳出,於是拆成兩個點 入點和出點。每一根柱子的入點和出點連一條流量為高度的邊,來限制蜥蜴跳入的次數。當柱子a可以調到柱子b時,就從a的出點向b的入點連邊,流量inf。s向所有有蜥蜴的柱子的入點連邊,流量為1 t表示地圖外一點,當一根柱子能跳到地圖外...