給出n和m,有n個點,m條雙向邊,1為起點,n為終點,每條邊都有乙個權值,經過每一條邊的時間都為1,求從起點到終點既要時間最少,又要權值組成的序列的字典序最小的一條路徑.
4 6
1 2 1
1 3 2
3 4 3
2 3 1
2 4 4
3 1 1
2 1 3
50%,n<=100
100%,n<=100000,m<=200000
又是一道雙關鍵字限制結果最優性的問題,此類問題一般思路就是列舉乙個,計算最優另乙個。
對於這道題,我們可以先用spfa算出從終點開始到每個點的距離,然後從起點開始,每一步都選擇權值最小的即可。其實也不是很複雜。
#include#include#include#include#includeusing namespace std;
const int maxn=610000;
const int inf=0x3f3f3f3f;
struct edgee[maxn];
int edgecnt=0;
int d[maxn],a[maxn];
bool inq[maxn];
queueq;
int n,m;
void addedge(int u,int v,int w)
int main()
}} inq[u]=false;
} printf("%d\n",d[1]);
setnow,next;
now.insert(1);
for (int dist=d[1]-1;dist>=0;dist--)else if (next.find(j)==next.end())next.insert(j);}}
} printf("%d ",col);
now=next;next.clear();
} return 0;
}
最短路 逆向思維 字典序最小
題意 無向圖,每個點由大小寫組成,大寫字母代表城鎮,經過需要繳納 ce il s um 20 ceil sum 20 ceil sum 20費用,小寫字母代表村莊,經過需要繳納1 11費用。已經到達目的地點t tt,需要運送到的貨物,求從起點s ss需要帶的貨物的最小值,並輸出字典序最小的路線 起點...
Hdu 1385(最短路 字典序)
hdu 1385 1 題意 n個城市,每個城市之間有可能有一條路,走過這條路的花費為x,經過每個城市的花費為val,給出n n的城市地圖,q個查詢,每次查詢x y城市之間的最短距離。如果有多條最短路,輸出字典序最小的那條。2 spfa思路 path陣列記錄路徑,如果存在多條最短路,就用字串記錄一下最...
BFS求最短路徑並且輸出最小字典序路徑
題目鏈結 題目很好理解大家自己去看一下就好,大致思路就是bfs求出路徑並且利用陣列記錄一下路徑,b nx ny b x y 1代表 x,y 是 nx,ny 的字首,這個技巧很好用,從乙個大佬那裡學來的 heihei 然後我們需要從終點開始作為bfs的起點,並且記錄路徑,這樣做的目的就是保證了我們記錄...