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