2017 9 1 最小生成樹 失敗總結

2021-08-07 16:08:43 字數 821 閱讀 5358

這題還是挺好的、就是有一點繞

一開始只想到要刪去選定邊兩個頂點相連的邊,然後再if刪除,但這樣是錯誤的

其實乙個邊在不在最小生成樹里就只要看有沒有一條路徑能全走比他小的邊,使得這條邊的兩個點聯通就好了

因為如果有一條路徑中出現了比他小的邊,,那這個邊就可以選,當前邊就可以斷開,至少會比使用當前邊會小

或者從kruskal演算法的原理,如果比他小的邊聯通了這兩個點,那這個邊一定不會被選到

最大生成樹同理,,

所以就相當於斷掉最少的邊,使u到v沒有一條除選定邊以外的路徑

最 小 割

#include#include#include#includeusing namespace std;

#define inf 1000000007

#define n 800005

queueq;

int tot=-1,n,m,dis[n],hou[n],xia[n],zhi[n],zhong[n],x,y,z,daan,yuan[n],s,t,a[n],b[n],c[n],l;

void jian(int x,int y,int z)

void jia(int x,int y,int z)

bool bfs(int s,int t)

dis[s]=0;

q.push(s);

while(!q.empty())

}} return dis[t]l)jia(a[i],b[i],1);

} daan+=dinic(s,t);

printf("%d",daan);

}

最小生成樹總結

給定一張圖,圖中有許多的節點還有許多長度不同的邊將這些點點相互連線,找出連線所有點的最短方式就是最小生成樹,可以證明,這樣一種最小的情況是不會出現環的,由於所有的無環圖都可以看做樹,所以成為最小生成樹。頂層思想是分治,選擇策略是貪心,實現方法如下 以邊為中心,先將所有的邊從小到大進行排序,之後依照大...

最小生成樹總結

啊,先紀念一下吧,難得一天這麼 666 ac 完了所有題 次小生成樹 看懂 今天學到了最小生成樹演算法中的 prim 演算法和kruskal 演算法。從巨集觀上來講 prim 更適合稠密圖,krustal 更適合稀疏圖,但對於我們來說暫時沒有什麼區別啦。prim 演算法中主要注意的點是 在visit...

最小生成樹總結

研究了一天最小生成樹 衍生出來包括最小瓶頸樹,次小生成樹,最小樹形圖之類的演算法,前兩者基本能搞定,最後那個就。不太懂了日後再回去看吧似乎很少用到,抄個模板以備不時之需 先談談最小瓶頸樹 首先注意這兩個定理 命題 無向圖的最小生成樹一定是瓶頸生成樹。命題 瓶頸生成樹不一定是最小生成樹 好了 知道這個...