省**「暢通工程」的目標是使全省任何兩個村莊間都可以實現公路交通(但不一定有直接的公路相連,只要能間接通過公路可達即可)。現得到城鎮道路統計表,表中列出了任意兩城鎮間修建道路的費用,以及該道路是否已經修通的狀態。現請你編寫程式,計算出全省暢通需要的最低成本。
input測試輸入包含若干測試用例。每個測試用例的第1行給出村莊數目n ( 1< n < 100 );隨後的 n(n-1)/2 行對應村莊間道路的成本及修建狀態,每行給4個正整數,分別是兩個村莊的編號(從1編號到n),此兩村莊間道路的成本,以及修建狀態:1表示已建,0表示未建。
當n為0時輸入結束。output每個測試用例的輸出佔一行,輸出全省暢通需要的最低成本。sample input
3sample output1 2 1 0
1 3 2 0
2 3 4 0
31 2 1 0
1 3 2 0
2 3 4 1
31 2 1 0
1 3 2 1
2 3 4 1
0
310這個題目給了路徑的條數,所以最好用kruskal
#include #include #include #include using namespace std;const int maxn=5050;
int n,m,cnt=0;
int f[maxn];
struct node
}exa[maxn];
void init()
int findx(int x)
void unite(int a,int b)
bool same(int x,int y)
bool cmp(node a,node b)
int kruskal()
return res;
}int main()
// printf("%d\n",cnt);
printf("%d\n",kruskal());
} return 0;
}
kruscal求最小生成樹 繼續暢通工程
kruscal求最小生成樹用到的知識 圖的邊的結構體 按邊權排序 並查集 不產生迴路 但是這道題仍然需要精心思考,原因是有一些邊是 已經存在的 那麼在計算最小生成樹成本的時候應該只考慮未修成的邊。要注意兩個易錯點 多組資料,並查集father陣列要初始化,一些全域性陣列要初始化。由於有些邊已經存在,...
暢通工程(最小生成樹)
首先要判斷能否構成生成樹,剛開始的思路是用hash遍歷城市,看是否所有的城市都記錄進取,被測試資料誤導,如果給這組資料 1,2 3,4 這麼沒辦法構成單樹。include include const int inf 0x7fffffff const int maxn 110 int hash max...
HDU 1879 繼續暢通工程 最小生成樹
省 暢通工程 的目標是使全省任何兩個村莊間都可以實現公路交通 但不一定有直接的公路相連,只要能間接通過公路可達即可 現得到城鎮道路統計表,表中列出了任意兩城鎮間修建道路的費用,以及該道路是否已經修通的狀態。現請你編寫程式,計算出全省暢通需要的最低成本。測試輸入包含若干測試用例。每個測試用例的第1行給...