HDU1598 並查集 或 二分 DFS

2021-07-03 02:35:58 字數 999 閱讀 1113

題意:求從s到t的所有路線中最大邊權與最小邊權差值的最小值。

方法一:並查集+貪心

將邊按照邊權從小到大排序,然後依次選取邊作為從s到t路線的最小邊,然後再按照邊權從小到大不斷加邊,直到s、t聯通,則最後加的邊的邊權與最小邊權的差是答案的乙個可能解。對最小邊依次列舉,答案為所有可能解的最小值。

#include#include#include#include#include#include#include#define clr(a,b) memset(a,b,sizeof(a))

using namespace std;

const int maxn = 205;

const int maxm = 1005;

const int inf = 0x3f3f3f3f;

int n,m;

struct edge

}e[maxm];

int len;

int par[maxn];

void init_union()

int find(int x)

void unite(int x,int y)

bool same(int x,int y)

void solve(int s,int t);

vectorg[maxn];

bool vis[maxn];

vectorspeed;

void init()

void add_edge(int u,int v,int cost));

g[v].push_back((edge));

}void dfs(int v,int low,int up)

}}void solve(int s,int t){

double lb = 0,rb = inf;

while(rb - lb > 0.2){

double mid = (lb + rb) / 2;

bool flag = false;

for(int i=0;i

HDU1598 並查集 列舉

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

HDU 1598 (列舉 並查集)

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

hdu3081 二分 並查集 最大流

題意 有n個女孩,n個男孩,對於每個女孩有幾個沒有爭吵過的男孩,每個女孩有幾個朋友 都是女孩 對於沒有爭吵過的男孩可以建立關係。這樣就可以進行一次遊戲,那麼下一次可以選擇乙個之前沒有選擇過的人建立關係。那麼求最多能進行多少次關係。思路 對於朋友關係,很容易想到用並查集維護,那麼在乙個集合中所連的邊都...