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 ...
随机推荐
- Python学习方法(待补充)
一.好思想总结: 1.一个东西,正在学会了,是需要能简单教会别人,才是真正的理解透彻了,要是讲不透彻,还是一知半解. 2.思路别人教不了你,学会简单处理任何问题,再复杂的东西,在我看来现实项目中,很多 ...
- Ubuntu Kylin 14.04 安装配置 jdk、eclipse、tomcat 通用
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/qq1053781225/article/details/24810107 一.安装jdk ...
- MySQL DBA 管理常用命令
一:在Linux下管理MySQL数据库的时候总有一些很紧急的情况,发现数据库突然变得压力很大了,那么作为一个DBA,也许需要一些常用的手段或者说命令去分析问题出现在哪里,然后解决: 数据库突然产生压力 ...
- XMR恶意挖矿案例简析
前言 数字货币因其技术去中性化和经济价值等属性,逐渐成为大众关注的焦点,同时通过恶意挖矿获取数字货币是黑灰色产业获取收益的重要途径.本文简析通过蜜罐获取的XMR恶意挖矿事件:攻击者通过爆破SSH获取系 ...
- Java 7代码层面上的更新
Java 7已经完成的7大新功能: 1 对集合类的语言支持: 2 自动资源管理: 3 改进的通用实例创建类型推断: 4 数字字面量下划线支持: ...
- Django初级手册2-管理界面的使用及定制
管理界面的使用 管理界面的URL,帐号和密码在第一次输入syncdb时建立 http://127.0.0.1:8000/admin/ 将app加入管理界面 编辑polls/admin.py from ...
- VS中出现“链接器工具错误,XXX工具模块对于SAFESEH映像是不安全的”的解决方法
1.“调试”菜单->“属性”->“配置属性”->“链接器”->“命令行” 2.在“其它选项”的输入框里输入 /SAFESEH:NO ,点击“应用”
- VS2010/MFC编程入门之五十二(Ribbon界面开发:创建Ribbon样式的应用程序框架)
上一节中鸡啄米讲了GDI对象之画刷CBrush,至此图形图像的入门知识就讲完了.从本节开始鸡啄米将为大家带来Ribbon界面开发的有关内容.本文先来说说如何创建Ribbon样式的应用程序框架. Rib ...
- memecached常用命令
memcached 常用命令及使用说明 1.启动Memcache 常用参数 -p <num> 设置TCP端口号(默认设置为: 11211) -U <num> UDP监听端口(默 ...
- 关于阿里云专有网络搭建FTP服务器的深坑
之前用的FTP服务器都是,随便搭建一下就能用了, 昨天因为服务器的问题,换了个服务器,搭建FTP服务器的时候发现, 搭建的服务器居然只能使用 主动模式访问,改成被动后 无法获取目录, 百度了 各大论坛 ...