ccf 最优灌溉
2015-03-25 21:38
127 查看
问题描述
试题编号: | 201412-4 |
试题名称: | 最优灌溉 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 雷雷承包了很多片麦田,为了灌溉这些麦田,雷雷在第一个麦田挖了一口很深的水井,所有的麦田都从这口井来引水灌溉。 为了灌溉,雷雷需要建立一些水渠,以连接水井和麦田,雷雷也可以利用部分麦田作为“中转站”,利用水渠连接不同的麦田,这样只要一片麦田能被灌溉,则与其连接的麦田也能被灌溉。 现在雷雷知道哪些麦田之间可以建设水渠和建设每个水渠所需要的费用(注意不是所有麦田之间都可以建立水渠)。请问灌溉所有麦田最少需要多少费用来修建水渠。 输入格式 输入的第一行包含两个正整数n, m,分别表示麦田的片数和雷雷可以建立的水渠的数量。麦田使用1, 2, 3, ……依次标号。 接下来m行,每行包含三个整数ai, bi, ci,表示第ai片麦田与第bi片麦田之间可以建立一条水渠,所需要的费用为ci。 输出格式 输出一行,包含一个整数,表示灌溉所有麦田所需要的最小费用。 样例输入 4 4 1 2 1 2 3 4 2 4 2 3 4 3 样例输出 6 样例说明 建立以下三条水渠:麦田1与麦田2、麦田2与麦田4、麦田4与麦田3。 评测用例规模与约定 前20%的评测用例满足:n≤5。 前40%的评测用例满足:n≤20。 前60%的评测用例满足:n≤100。 所有评测用例都满足:1≤n≤1000,1≤m≤100,000,1≤ci≤10,000。 |
//最小生成数prim 1 #include<bits/stdc++.h> using namespace std; const int maxn=1007; const int inf=0x3f3f3f3; int n,m; struct node { int to,cost; }; bool vis[maxn]; int d[maxn]; vector<node> G[maxn]; void init() { for(int i=0;i<maxn;i++) { G[i].clear(); } } int prim() { int ans=0; for(int i=1;i<maxn;i++) { d[i]=inf; vis[i]=0; } d[1]=0; while(1){ int v=-1; for(int i=1;i<=n;i++) { if(!vis[i]&&(v==-1||d[i]<d[v])) v=i; } if(v==-1) break; vis[v]=1; ans+=d[v]; for(int i=0;i<G[v].size();i++) { if(vis[G[v][i].to]) continue; d[G[v][i].to]=min(d[G[v][i].to],G[v][i].cost); } } return ans; } int main() { //freopen("in.txt","r",stdin); int a,b,c; node n1; while(~scanf("%d%d",&n,&m)){ init(); for(int i=0;i<m;i++) { scanf("%d%d%d",&a,&b,&c); n1.to=b;n1.cost=c; G[a].push_back(n1); n1.to=a; G[b].push_back(n1); } int ans=prim(); printf("%d\n",ans); } }
相关文章推荐
- CCF模拟题 最优灌溉
- 【CCF】最优灌溉
- CCF 201412-4 最优灌溉
- CCF-CSP 201412-4 最优灌溉(prim算法版本)
- ccf-2014-12-4-最优灌溉
- ccf 最优灌溉(其实和hdu里的1863 畅通工程)原理一样
- ccf认证题-最优灌溉(最小生成树)
- ccf 最优灌溉
- ccf 最优灌溉
- CCF CSP 201412-4 最优灌溉
- ccf 201412-4 最优灌溉
- CCF 201412-4 最优灌溉(最小生成树,prime算法,kurskal算法)
- CCF CSP认证 题解:201412-4 最优灌溉 Kruskal最小生成树+并查集(Java语言原创)
- ccf最优灌溉最小生成树
- CCF 最优灌溉
- CCF CSP 最优灌溉 JAVA 201412_4 100分
- CCF 最优灌溉
- ccf 201412-4 最优灌溉 100
- CCF——最优灌溉(最小生成树)
- 201412-4 最优灌溉 ccf