HDU 1863 畅通工程 (最小生成树
看卿学姐视频学到的题目
kruskal算法实现最小生成树
#include<bits/stdc++.h>
using namespace std;
const int maxn = ;
typedef long long ll;
int n,m;
struct edge{
int from ,to;
ll cost;
}E[maxn*maxn];
bool cmp(edge a,edge b)
{
return a.cost < b.cost;
}
int fa[maxn];
void init()
{
for(int i=; i <= maxn; i++)
fa[i] = i;
}
int fi(int x)
{
return fa[x] == x? x :fa[x] = fi(fa[x]);
} void Union(int x,int y)
{
int f1=fi(x);
int f2=fi(y);
if(f1 != f2)
fa[f1] = f2;
} bool check(int x,int y)
{
return fi(x) == fi(y);
} ll kruskal()
{
ll cnt = ;
sort(E+,E++m,cmp);
for(int i=;i <= m;i++)
{
if(check(E[i].from,E[i].to)) continue;
Union(E[i].from,E[i].to);
cnt += E[i].cost;
}
return cnt;
} int main ()
{
while (~scanf("%d %d",&m,&n) && m){
init();
for(int i=;i <= m;i++)
{
scanf("%d %d %lld",&E[i].from,&E[i].to,&E[i].cost);
}
ll res = kruskal();
for(int i=; i <=n;i++)
if(!check(i,))
res = -;
if(res == -)
puts("?");
else
printf("%lld\n",res);
}
return ;
}
prim 算法实现 (坑点好多 还要多写写 熟练一些
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = ;
int n,m;
struct edge{
int to;
ll cost;
edge(){}
edge(int tt,ll cc):to(tt),cost(cc){}
bool operator < (const edge &l)const{
return l.cost < cost;
}
}; priority_queue<edge> que;
vector <edge> G[maxn];
bool vis[maxn]; void init()
{
memset(vis,,sizeof(vis));
while (que.size())
que.pop();
for(int i=;i <= n;i++)
G[i].clear();
} ll prim()
{
vis[] = ;//要把1先加进去
ll cnt = ;
for(int i=; i < G[].size();i++)//从第一个顶点取出最短的边
que.push( G[][i] );
while(que.size())
{
edge e = que.top();
que.pop();
if(vis[e.to])
continue;
vis[e.to] = ;
cnt += e.cost;
for(int i=;i< G[e.to].size();i++)
que.push(G[e.to][i]);
//cout << cnt<<endl;
}
return cnt;
} int main ()
{
while (~scanf("%d %d",&m,&n) && m){
init();
for(int i=;i <= m;i++)
{
int u,v;
ll cost;
scanf("%d %d %lld",&u,&v,&cost);
G[u].push_back(edge(v,cost));
G[v].push_back(edge(u,cost));
} ll res = prim();
for(int i=; i <= n;i++)
if( vis[i] == )
res = -;
// for(int i=1; i <= n;i++)
// printf("%d",vis[i]);
if(res == -)
puts("?");
else
printf("%lld\n",res);
}
return ;
}
HDU 1863 畅通工程 (最小生成树的更多相关文章
- HDU 1863 畅通工程(最小生成树,prim)
题意: 给出图的边和点数,要求最小生成树的代价,注:有些点之间是不可达的,也就是可能有多个连通图.比如4个点,2条边:1-2,3-4. 思路: 如果不能连通所有的点,就输出‘?’.之前以为每个点只要有 ...
- HDU 1863 畅通工程 最小生成树
思路: 比较典型的最小生成树的题目了..在这里用求最小生成树的经典算法K(Kruskal)算法和P(Prim)算法.我的 K 算法用的是结构体来存图,P 算法用的是邻接矩阵来存图,K算法的复杂度是O( ...
- hdu 1863 畅通工程 (并查集+最小生成树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863 畅通工程 Time Limit: 1000/1000 MS (Java/Others) M ...
- <hdu - 1863> 畅通工程 并查集和最小生成树问题
本题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863 Problem Description: 省政府“畅通工程”的目标是使全省任何两个村庄间都可以 ...
- hdu 1863 - 畅通工程(MST)
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 题解报告:hdu 1863 畅通工程
Problem Description 省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出了有可 ...
- HDU 1863 畅通工程
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...
- HDU 1863 畅通工程(Prim算法求解MST)
题目: 省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本.现 ...
- HDU 1863 畅通工程 克鲁斯卡尔算法
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU 1863 畅通工程(Kruskal)
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
随机推荐
- 如何批量删除SQL注释?
如何批量删除SQL注释.. 这个,可能是用来干坏事的吧.不过有时候要做一些重构,也还是有用.嘿嘿 使用工具,notepad++,注意要选择正则表达式按钮才行. [1]删除 /* */ /\*{1, ...
- [MySQL 5.6] MySQL 5.6 group commit 性能测试及内部实现流程
[MySQL 5.6] MySQL 5.6 group commit 性能测试及内部实现流程 http://mysqllover.com/?p=581 尽管Mariadb以及Facebook在long ...
- react.js 教程之 Installation 安装
react.js 教程之 Installation 安装 运行方法 运行react有三种方式 1.如果你只是学习react,可以在http://codepen.io/gaearon/pen/rrpgN ...
- Centos7 中 Node.js安装简单方法
最近,我一直对学习Node.js比较感兴趣.下面是小编给大家带来的Centos7 中 Node.js安装简单方法,在此记录一下,方便自己也方便大家,一起看看吧! 安装node.js 登陆Centos ...
- Pycharm模板添加默认信息
我们在Pycharm中使用到python3.x版本的解释器,完全没有问题可以正常使用,但是有的时候多少会出现使用python2的时候 我们明明都把代码和文字注释了,为什么使用的时候还会报错呢?? 报错 ...
- 解决PHPStorm经常卡顿现象 调整内存限制
https://www.jisec.com/other/451.html 为什么调整内存? 最近发现PHPstorm在打开一些大点的js, html文件时,会非常的卡顿,这个主要的原因是因为设置的内存 ...
- [py]函数中yield多次返回,延迟计算特性-杨辉三角
搞清什么是杨辉三角 每行是一个数组, 第一行: [1] 第二行: [1, 1] 第三行: [1, 2, 2, 1] ... 画的好看点就是,不过没啥卵用 1 / \ 1 1 / \ / \ 1 2 1 ...
- matplotlib--画图时保存图片空白的问题
问题: 当使用如下代码保存使用 plt.savefig 保存生成的图片时,结果打开生成的图片却是一片空白. import matplotlib.pyplot as plt ""&q ...
- numpy.random.rand()/randn()/randint()/normal()/choice()/RandomState()
这玩意用了很多次,但每次用还是容易混淆,今天来总结mark一下~~~ 1. numpy.random.rand(d0,d1,...,dn) 生成一个[0,1)之间的随机数或N维数组 np.random ...
- .NET MVC model数据验证
MVC提供了很方便的数据验证,只需要在model里加入相关的正则等,那么就会在前台里生成相关的验证脚本.需要引用两个js文件: jquery.validate.min.js jquery.valida ...