[51nod1212]最小生成树模板

解题关键:注意下标

解法一:prim算法

 1 #include<bits/stdc++.h>
 2 #define maxv 1002
 3 #define maxm 50002
 4 #define INF 0x3f3f3f3f
 5 using namespace std;
 6 typedef long long ll;
 7 int cost[maxv][maxv];
 8 int mincost[maxv];
 9 bool used[maxv];
10 int V;
11
12 int prim(){
13     fill(mincost,mincost+V,INF);
14     mincost[0]=0;
15     int res=0;
16
17     while(true){
18         int v=-1;
19         for(int u=0;u<V;u++){
20             if(!used[u]&&(v==-1||mincost[u]<mincost[v])) v=u;
21         }
22         if(v==-1) break;
23         used[v]=true;
24         res+=mincost[v];
25         for(int u=0;u<V;u++){
26             mincost[u]=min(mincost[u],cost[v][u]);
27         }
28     }
29     return res;
30 }
31 int main(){
32     for(int i=0;i<maxv;i++){
33         for(int j=0;j<maxv;j++){
34             cost[i][j]=INF;
35         }
36     }
37     int n,m,t1,t2,t3;
38     cin>>n>>m;
39     V=n;
40     for(int i=0;i<m;i++){
41         cin>>t1>>t2>>t3;
42         cost[t1-1][t2-1]=cost[t2-1][t1-1]=t3;
43     }
44     int ans=prim();
45     cout<<ans<<endl;
46 }
时间: 2024-10-16 03:53:47

[51nod1212]最小生成树模板的相关文章

最小生成树模板

//最小生成树模板 /* kruskal算法,把所有的边从小到大排序,接下来从小到大考查每条边(u,v); 1.u和v在同一个连通分量中,那么加入(u,v)后会形成环,因此不能选择. 2.如果u和v在不同的联通分量中,那么加入(u,v)一定是最优的. */ #include<iostream> #include<cstring> #include<algorithm> using namespace std; int fat[102];//存放父节点 struct Lu

(heu step 6.1.1)Constructing Roads(最小生成树模板题:求让n个点连通的最小费用)

题目: Constructing Roads Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 207 Accepted Submission(s): 135   Problem Description There are N villages, which are numbered from 1 to N, and you should bu

hdu 4009 Transfer water(最小树形图:有向图的最小生成树模板)

题目: 链接:点击打开链接 题意: 有n个村庄,要求使得每个村庄都能得到水的最小费用.每个村庄可以通过挖井或从其他村庄修水路获得水.挖井的费用是房子的高度乘以X,修水道的费用和有向图边的起点和终点的高度有关. 思路: 代码: #include <iostream> #include <cstdio> #include <cmath> #include <cstring> using namespace std; #define inf 0x3f3f3f3f

Agri-Net POJ 1258(最小生成树模板)

原题 题目链接 题目分析 比较明显的最小生成树模板题,题目给的输入是邻接矩阵,处理一下用prim算法就可以算出最小生成树了. 代码 1 #include <iostream> 2 #include <algorithm> 3 #include <utility> 4 #include <cstdio> 5 #include <cmath> 6 #include <cstring> 7 #include <string> 8

还是畅通工程——最小生成树模板题

题目链接 题意: 给定n个村庄,m=(n*(n-1)/2)条关系  u,v,w 表示  u到 v之间的距离是 w 题解: 裸最小生成树模板题 代码: #include<iostream> #include<stdio.h> #include<math.h> #include<algorithm> #include<vector> using namespace std; typedef long long ll; const int maxn =

POJ2560 (最小生成树模板题)

In an episode of the Dick Van Dyke show, little Richie connects the freckles on his Dad's back to form a picture of the Liberty Bell. Alas, one of the freckles turns out to be a scar, so his Ripley's engagement falls through. Consider Dick's back to

HDU 1233 prim kruskal最小生成树模板题

A - 还是畅通工程 Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Description 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小.请计算最小的公路总长度. Input 测试输入包含若干测试

最小生成树模板题-----P3366 【模板】最小生成树

题目描述 如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出orz 输入格式 第一行包含两个整数N.M,表示该图共有N个结点和M条无向边.(N<=5000,M<=200000) 接下来M行每行包含三个整数Xi.Yi.Zi,表示有一条长度为Zi的无向边连接结点Xi.Yi 输出格式 输出包含一个数,即最小生成树的各边的长度之和:如果该图不连通则输出orz 输入输出样例 输入 #1复制 4 5 1 2 2 1 3 2 1 4 3 2 3 4 3 4 3 输出 #1复制 7 说明/提示 时空

poj 1251 最小生成树模板题

Sample Input 9 //n 结点数A 2 B 12 I 25B 3 C 10 H 40 I 8C 2 D 18 G 55D 1 E 44E 2 F 60 G 38F 0G 1 H 35H 1 I 353A 2 B 10 C 40B 1 C 200Sample Output 21630 prim算法 1 # include <iostream> 2 # include <cstdio> 3 # include <cstring> 4 # include <