hdu1233 還是暢通工程 prim

2021-07-04 19:06:25 字數 890 閱讀 1336

#include

#include

#include

using namespace std;

const int maxn = 105;

const int inf = 0xffffff;

struct node

};vectorg[maxn];

bool intree[maxn];//intree[v] = true表示v在生成樹集合中

int mindist[maxn],n;

//mindist[x] = y表示:

//x屬於集合v,f中所有結點到x的最小距離為y,這裡一定要好好理解!!!

void init()

}int prim(int s)//s是第乙個加入生成樹的結點

for(int nodenum = 1 ; nodenum <= n - 1 ; ++nodenum)

}/******************************/

intree[addnode] = true;         //addnode 加入集合f

ans += tempmin;                 //此時tempmin是最小權值

/******************************/

for(unsigned int i = 0 ; i < g[addnode].size() ; ++i)

/*****************************/

}return ans;

}int main()

int ans = prim(1);//1結點作為起點

printf("%d\n",ans);

}return 0;

}

HDU 1233 還是暢通工程

題意 有1 n個村莊,村莊與村莊之間要鋪設公路,在使任意兩個村莊都能相互到達的前提下使修路的花費最少 解題思路 這題是典型的最小生成樹的題,可以選擇prim演算法或者kruskal演算法。prim使用與稀疏圖,二此題中的邊有n n 1 2條,因此最好是用kruskal演算法。kruskal演算法的思...

hdu 1233 還是暢通工程

這個題我用的貪心和並查集來解決的。kruskal演算法 首先用貪心對長度排序,然後按照長度從小到 擇連線,沒有被聯通的則直接連,要注意乙個問題就是如果4個村莊是1 4聯通了,2 3聯通了,那麼肯定還要讓這兩個集合聯通 用並查集 因此我用了乙個p來表示不同的集合。ac include include ...

hdu 1233 還是暢通工程

傳送門給定n個村子,和每個村子之間的距離,現在要求連線這n個村子的最小距離這題典型的最小生成樹模板題,krusal演算法和prim演算法都可以達到要求 並且這題的資料量不大,並且是完全圖,利用鄰接矩陣做就好 include const int maxn 1e2 2 int g maxn maxn i...