題目大意:要建井,每個地方都要有,可以選擇直接在這裡挖井,也可以選擇從其他地方已經有井的地方建一條路到這個地方來。
有一段時間沒有寫過最小生成樹了,感覺都有一點快要忘記了的感覺。。。。
這道題之前沒有過,借鑑了一下別人的思想。。發現真的好簡單。。。而且這種方法在以前使用過,這回居然沒有想出來,,要反思一下了。。。感覺跟之前那個只是換了個描述而已····
思路:既然可以挖井,那麼也就意味著可以從任意乙個井開始挖,甚至還可以每個都用挖的而不建路,這樣不方便求最小生成樹,但是可以自己設立乙個總的起點,這個總起點到各個水井的權值就是挖井所需要的花費,這樣我們就轉化成了只有乙個開始的點,從這個起點出去求最小生成樹就可以啦。也能保證至少有乙個井是挖出來的
**:
#include #include #include #include using namespace std;
#define m 309
struct node
edge[m*m];
int p[m];
int k;
int ans;
int cmp(node a,node b)
int find(int x)
void kruskal()
}}int main()
for(int i = 1;i <= n;i++)
}sort(edge,edge+k,cmp);
kruskal();
printf("%d\n",ans);
}return 0;
}
3366 模板 最小生成樹(Prim)
如題,給出乙個無向圖,求出最小生成樹,如果該圖不連通,則輸出orz 輸入格式 第一行包含兩個整數n m,表示該圖共有n個結點和m條無向邊。n 5000,m 200000 接下來m行每行包含三個整數xi yi zi,表示有一條長度為zi的無向邊連線結點xi yi 輸出格式 輸出包含乙個數,即最小生成樹...
SOJ 1169 最小生成樹 kruskal
kruskal 基於一種貪心的思想 先對邊權排序。然後並查集。include include include include include include include include define inf 0x7fffffff define maxn 55 using namespace st...
P3366 模板 最小生成樹
如題,給出乙個無向圖,求出最小生成樹,如果該圖不連通,則輸出orz 輸入格式 第一行包含兩個整數n m,表示該圖共有n個結點和m條無向邊。n 5000,m 200000 接下來m行每行包含三個整數xi yi zi,表示有一條長度為zi的無向邊連線結點xi yi 輸出格式 輸出包含乙個數,即最小生成樹...