題意描述:簡單的講就是,給你一張無向圖,求有多少條路徑使得路徑上的花費小於l,這裡路徑上的花費是這樣規定的,a、b兩點之間的多條路徑中的最長的邊最小值!
思路:這題目有多個詢問,肯定要用離線輸出。思路的話,我們只需要從小到達列舉邊的長度,如果兩個並查集沒有連通,那麼聯通之後的路徑條數就應該是(num[a]*num[b])........
#include#include#include#includeusing namespace std;
int father[10005],num[10005];
struct node
s[50005];
struct node1
t[10005];
int cmp(const node a,const node b)
int maxn=0;
for(int i=0;i=s[j].dis)
j++;}}
sort(t,t+q,cmp2);
for(int i=0;iprintf("%d\n",t[i].ans);
}return 0;
}
hdu 1863 最小生成樹
使用並查集,陣列不要太小 include stdio.h int set 200 int n,m typedef struct nodenode,pnode node road 200 void init int find int u return set u int join int u,int ...
hdu 4081 最小生成樹
先求出最小生成樹,然後列舉樹上的邊,對於每條邊 分別 找出這條割邊形成的兩個塊中點權最大的兩個 1.由於結果是a b,a的變化會引起b的變化,兩個制約,無法直接貪心出最大的a b,故要通過列舉 2.不管magic road要加在 加的邊是否是最小生成樹上的邊,都會產生環,我們都要選擇一條邊刪掉 注意...
hdu 1863(最小生成樹)
基礎的最小生成樹問題,不過 要特判條件不足的情況 include include define inf 1 30 int n,m,vis 110 low 110 int map 110 110 int init int prim if pos 1 return 1 代表這當前步驟缺少條件 int k...