生活随笔
收集整理的這篇文章主要介紹了
VIJOS【1234】口袋的天空
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
背景
小杉坐在教室里,透過(guò)口袋一樣的窗戶(hù)看口袋一樣的天空。
有很多云飄在那里,看起來(lái)很漂亮,小杉想摘下那樣美的幾朵云,做成棉花糖。
描述
給你云朵的個(gè)數(shù)N,再給你M個(gè)關(guān)系,表示哪些云朵可以連在一起。
現(xiàn)在小杉要把一些云朵連在一起,做成K個(gè)棉花糖,一個(gè)棉花糖最少要用掉一朵云,小杉想知道他怎么連,花費(fèi)的代價(jià)最小。
格式
輸入格式
每組測(cè)試數(shù)據(jù)的
第一行有三個(gè)數(shù)N,M,K(1<=N<=1000,1<=M<=10000,1<=K<=10)
接下來(lái)M個(gè)數(shù)每行三個(gè)數(shù)X,Y,L,表示X云和Y云可以通過(guò)L的代價(jià)連在一起。(1<=X,Y<=N,0<=L<10000)
30%的數(shù)據(jù)N<=100,M<=1000
輸出格式
對(duì)每組數(shù)據(jù)輸出一行,僅有一個(gè)整數(shù),表示最小的代價(jià)。
如果怎么連都連不出K個(gè)棉花糖,請(qǐng)輸出'No Answer'。
樣例1
樣例輸入1[復(fù)制]
3 1 2
1 2 1
樣例輸出1[復(fù)制]
1
限制
每個(gè)測(cè)試點(diǎn)1s
提示
樣例2:
Input:
3 1 1
1 2 1
Output:
No Answer
因?yàn)閱蝹€(gè)云可以做成一個(gè)棉花糖,所以顯然我們要做(k-1)個(gè)一朵云的棉花糖,也就是用生成一個(gè)n-1—(k-1)=n-k條邊的最小生成樹(shù),kruskal。 并查集寫(xiě)掛了,WA了TM整整6次!
1 #include<cstdio>
2 #include<cstdlib>
3 #include<cmath>
4 #include<cstring>
5 #include<iostream>
6 #include<vector>
7 #include<map>
8 #include<
set>
9 #include<stack>
10 #include<
string>
11 #include<algorithm>
12 #define maxn 10000+50
13 #define inf 0x7fffffff
14 #define xiao 1e-9
15 using namespace std;
16 int fa[maxn],sum=
0;
17 struct Edge{
int x,y,v;}edge[
10000+
5];
18 int find(
int x)
19 {
20 if(fa[x]!=x) fa[x]=
find(fa[x]);
21 return fa[x];
22 }
23 int cmp(
const Edge &a,
const Edge &
b)
24 {
25 if(a.v<b.v)
return 1;
26 else return 0;
27 }
28 int main()
29 {
30 int n,m,k,x,y,z,tot=
0,ans=
0;
31 scanf(
"%d%d%d",&n,&m,&
k);
32 if(m<n-k||n<k) {printf(
"No Answer");
return 0;}
33 for(
int i=
1;i<=m;++
i)
34 {
35 scanf(
"%d%d%d",&x,&y,&
z);
36 edge[i].x=x;edge[i].y=y;edge[i].v=
z;
37 }
38 sort(edge+
1,edge+m+
1,cmp);
39 for(
int i=
1;i<=n;++i) fa[i]=
i;
40 for(
int i=
1;i<=m;++
i)
41 {
42 int faa=
find(edge[i].x);
43 int fab=
find(edge[i].y);
44 if(faa!=
fab)
45 {
46 fa[faa]=
fab;
47 ans+=
edge[i].v;
48 sum++
;
49 }
50 if(sum==n-k) {
break;}
51 }
52 cout<<
ans;
53 return 0;
54 }
55
56
57 ?
轉(zhuǎn)載于:https://www.cnblogs.com/TYH-TYH/p/4938441.html
總結(jié)
以上是生活随笔為你收集整理的VIJOS【1234】口袋的天空的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。