1/*la 5717
2《訓練指南》p343
3最小生成樹的迴路性質
4在生成的最小生成樹上,新增一條邊e(u,v)
5若原圖上u到v的路徑的最大邊大於e,則刪除此邊,加上e,否則不變。67
若原圖上u到v的路徑的最大邊的產生:bfs/dfs都可 ,nm的複雜度,從每個點出發,找到每條邊,更新最大即可8*/
910 #include11 #include
12 #include13 #include14 #include15 #include16 #include17 #include18 #include
19 #include20
#define ll unsigned long long
21#define maxn 1010
22#define inf 99999
23using
namespace
std;
2425
double
x[maxn];
26double
y[maxn];
27int
peo[maxn];
28int
p[maxn];
29double l;//
最小生成樹總長度
30double
maxdis[maxn][maxn];
31int
n,cnt;
3233
double
nextnum()
3439
intnextint()
4045
46struct
edge
4753
void
print()
5457 } e[maxn*maxn];
5859 vectoredges;//
儲存新圖的邊
60 vectorg[maxn];//
記錄臨街的邊號
6162
double dis(int i,int
j)63
6768
int findx(int
x)69
7374
void merge(int x,int
y)75
8081
void
init()
8291
for(int i=1; i<=n; i++)
92for(int j=1; j<=n; j++)
93;//
建圖96}97
}9899void prim()//
最小生成樹&&構建新的圖
100);
115 g[u].push_back(edges.size()-1
);116
edges.push_back((edge));
117 g[v].push_back(edges.size()-1
);118
119if (edges.size()==2*(n-1)) break
;120
}121
}122 typedef pair node;//
《上乙個點,由起點到上乙個點的通路上的最大值》
123void max_dis()//
找到最小生成樹上的任意兩點之間的通路的最大的邊的長度,網上大多數版本是dfs實現,故寫了bfs
124147
}148
}149
}150
151int
main()
152168 printf("
%.2lf\n
",ans);
169}
170return0;
171 }
hdu 1598 列舉 最小生成樹
本題要求一條通路中,最高速與最低速的差值最小。這樣的題與求最小生成樹的題的求法完全不一樣了。為了保證通路中差值最小,應先對權值從小到大排序,然後遍歷所有的點進行查詢。起點的位置逐漸變大 保證每個點都遍歷 而只要所求的兩點連通,立刻break,以保證差值最小。include stdio.h inclu...
LA3887(最小生成樹)
給你乙個n n 100 個節點和m條邊的圖,你需要求乙個最大權值邊減去最小權值邊最小的生成樹。需要用到最小生成樹的思維 kruskal所求的最小生成樹保證了乙個條件,就是最大邊權最小。利用這個條件,我們從小到大列舉最小邊,然後用kruskal求最小生成樹,在這個最小生成樹上取最大邊,答案取最小值就好...
jzoj5895 旅遊 最小生成樹 尤拉迴路
本來暈乎乎的看到可憐就瞬間清醒了 其實我們可以通過加邊使得條件由每條邊走至少一次變成每條邊走恰好一次。注意到給出的邊非常特殊,可以發現所有有貢獻的邊都在最小生成樹上。如果n很小也可以考慮傳遞閉包做 考慮怎麼加邊,我們發現每次加邊會使兩端點度數的奇偶性發生變化。由於我們新增的實際上是一條路徑,那麼我們...