說實話,一看到這個題,我第一反應就是dfs,本來想用dfs搜尋每乙個可行的路徑,然後記錄每乙個可行路徑上的最小速度差,然後再找出最小。可是寫著寫著就寫不下去了,因為記錄路徑實在不會。在網上看別人的方法,才恍然大悟,原來並查集是可以的。好乙個經典的演算法啊。
思路:就是先按速度由小到大排序,然後在合併不在乙個集合的元素,並檢查起始點是否在乙個集合裡,如果已經在乙個集合裡了,那麼用這時的速度減去開始合併進來的那個速度,則這個值就是所要求解的值,當然還有沒有找到的情況,這個很好考慮了就
1 #include2 #include
3 #include
4 #include
5using
namespace std;
6#define inf 999999999
7#define n 250
8int a[n];
9int n,m;
10struct node
11 f[1010];
14int cmp(node c,node d)
15 18
int find(int x)
19 24
int main()
25 54
55 }
56if(j==m) break;
57 }
58if(k!=inf) cout<59
else cout<<"-1"
<60 }
61 }
62return
0;63 }
hdu1598 結題報告
題解 對於輸入的邊,我們首先按照速度從大到小排序,然後對於每一次詢問,st end 兩個城市,我們暴力列舉,for int i 0 i m i 然後我們從第 i 條邊開始 也就是說列舉刪除0 i條邊 到後面的第 m 條邊,我們用krustra,向並查集中插入每一條邊,看是不是能讓st 和 end 聯...
HDU1598 並查集 列舉
題意 給出乙個無向圖,每條邊代表兩點之間的同行速度,給出起點和終點,求出從起點到終點的路徑的最小速度差。若無法從起點到終點,則輸出 1。思路 儲存每條邊的資訊,按速度公升序排序。按速度從小到大列舉邊,然後依次往構建的樹中新增邊直到起點和終點在同一集合中。此時,最初新增的邊的速度與最後新增的邊的速度差...
HDU 1598 (列舉 並查集)
xx星有許多城市,城市之間通過一種奇怪的高速公路sars super air roam structure 超級空中漫遊結構 進行交流,每條sars都對行駛在上面的flycar限制了固定的speed,同時xx星人對 flycar的 舒適度 有特殊要求,即乘坐過程中最高速度與最低速度的差越小乘坐越舒服...