bzoj1083 SCOI2005 繁忙的都市

2022-08-16 14:45:08 字數 1337 閱讀 7537

城市c是乙個非常繁忙的大都市,城市中的道路十分的擁擠,於是市長決定對其中的道路進行改造。城市c的道

路是這樣分布的:城市中有n個交叉路口,有些交叉路口之間有道路相連,兩個交叉路口之間最多有一條道路相連

接。這些道路是雙向的,且把所有的交叉路口直接或間接的連線起來了。每條道路都有乙個分值,分值越小表示這

個道路越繁忙,越需要進行改造。但是市**的資金有限,市長希望進行改造的道路越少越好,於是他提出下面的

要求: 1. 改造的那些道路能夠把所有的交叉路口直接或間接的連通起來。 2. 在滿足要求1的情況下,改造的

道路盡量少。 3. 在滿足要求1、2的情況下,改造的那些道路中分值最大的道路分值盡量小。任務:作為市規劃

局的你,應當作出最佳的決策,選擇那些道路應當被修建。

第一行有兩個整數n,m表示城市有n個交叉路口,m條道路。接下來m行是對每條道路的描述,u, v, c表示交叉

路口u和v之間有道路相連,分值為c。(1≤n≤300,1≤c≤10000)

兩個整數s, max,表示你選出了幾條道路,分值最大的那條道路的分值是多少。

4 51 2 3

1 4 5

2 4 7

2 3 6

3 4 8

3 6這題是乙個很明顯的並查集。我們可以輕鬆地發現:若要同時達到1和2兩個條件,選擇的邊數只能為n-1條。因此我們只需要考慮第三個條件。我們按照邊權從小到大將所有邊排序。並列舉每一條邊。列舉時,檢視這兩條邊是否在同乙個並查集中,若不是,則合併這兩條邊所在的並查集,並將答案更新為這條邊的邊權。最後只要輸出n-1和最後選的那條邊的邊權即可。

1 #include2 #include3 #include4 #include5 #include6 #include7

using

namespace

std;

8struct

nodee[100010

];11

intn,m,ans,ansn;

12int fa[310

];13

bool

cmp(node a,node b)

16void

init()

19int find(int

x)23

void uni(int x,int

y)28

intmain()

34init();

35 sort(e+1,e+1+m,cmp);

36for(int i=1;i<=m;++i)41}

42 printf("

%d %d\n

",ansn,ans);

43return0;

44 }

BZOJ1083 SCOI2005 繁忙的都市

傳送門 題目大意 城市c是乙個非常繁忙的大都市,城市中的道路十分的擁擠,於是市長決定對其中的道路進行改造。城市c的道 路是這樣分布的 城市中有n個交叉路口,有些交叉路口之間有道路相連,兩個交叉路口之間最多有一條道路相連 接。這些道路是雙向的,且把所有的交叉路口直接或間接的連線起來了。每條道路都有乙個...

bzoj1083 SCOI2005 繁忙的都市

time limit 10 sec memory limit 162 mb submit 2350 solved 1537 submit status discuss 城市c是乙個非常繁忙的大都市,城市中的道路十分的擁擠,於是市長決定對其中的道路進行改造。城市c的道 路是這樣分布的 城市中有n個交叉...

BZOJ 1083 SCOI2005 繁忙的都市

time limit 10 sec memory limit 162 mb submit 1664 solved 1080 submit status discuss 城市c是乙個非常繁忙的大都市,城市中的道路十分的擁擠,於是市長決定對其中的道路進行改造。城市c的道路是這樣分布的 城市中有n個交叉路...