hdu1598 結題報告

2021-06-23 00:56:38 字數 747 閱讀 2755

題解:對於輸入的邊,我們首先按照速度從大到小排序,然後對於每一次詢問,st   end 兩個城市,我們暴力列舉,

for(int i = 0; i < m; i ++)  然後我們從第 i 條邊開始(也就是說列舉刪除0~i條邊),到後面的第 m 條邊,我們用krustra,向並查集中插入每一條邊,看是不是能讓st 和 end 聯通,那麼現在的 加入的這條邊的速度 - 第i條邊的速度就是 當前列舉情況的最小差啦,,我們與ans 比較一下取小值就可以break,進入下一條邊的列舉啦。因為速度都是按小到大排序的,次條邊能讓st 和 end聯通,再加邊,只會讓速度差更大

上馬://187ms 300k

#include #include using namespace std;

#define max 205

#define inf 1<<30

int n,m,q;

struct edge

}//這裡表示,從第i第m條邊,都不能讓st 和end 聯通,那麼可以break

if(j == m)

}return ans;

}int main()

sort(edge,edge+m);

int ans;

int st,end;

cin >> q;

while (q--)

{cin >> st >> end;

ans = krustra(st,end);

if(ans == inf) cout << "-1" <

hdu 1598 解題報告

說實話,一看到這個題,我第一反應就是dfs,本來想用dfs搜尋每乙個可行的路徑,然後記錄每乙個可行路徑上的最小速度差,然後再找出最小。可是寫著寫著就寫不下去了,因為記錄路徑實在不會。在網上看別人的方法,才恍然大悟,原來並查集是可以的。好乙個經典的演算法啊。思路 就是先按速度由小到大排序,然後在合併不...

HDU1598 並查集 列舉

題意 給出乙個無向圖,每條邊代表兩點之間的同行速度,給出起點和終點,求出從起點到終點的路徑的最小速度差。若無法從起點到終點,則輸出 1。思路 儲存每條邊的資訊,按速度公升序排序。按速度從小到大列舉邊,然後依次往構建的樹中新增邊直到起點和終點在同一集合中。此時,最初新增的邊的速度與最後新增的邊的速度差...

HDU 1598 (列舉 並查集)

xx星有許多城市,城市之間通過一種奇怪的高速公路sars super air roam structure 超級空中漫遊結構 進行交流,每條sars都對行駛在上面的flycar限制了固定的speed,同時xx星人對 flycar的 舒適度 有特殊要求,即乘坐過程中最高速度與最低速度的差越小乘坐越舒服...