hdu 1863 畅通project kruskal || prim
简单最小生成树,畅通project。这三道题目都是练习最小生成树的。
注意一下推断是否有通路时,kruskal能够推断每一个点的祖先是否同样。prim能够推断每一个点是否都加进集合里面了,也就是说是否都訪问过。
prim算法要把没有给的边初始化为MAX无穷大。
。。
代码:(kruskal)
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<vector>
#include<set>
#include<queue>
#include<string>
#include<algorithm>
#include<utility>
#include<functional>
#define MAX 0x7fffffff using namespace std;
int p[105];
struct node
{
int i,j,len;
}gra[10005];
int find(int x)
{
return x == p[x]? x: p[x] = find(p[x]);
}
int cmp(const void *a,const void *b)
{
return ((node *)a)->len - ((node *)b)->len;
}
int m,n;
void kruskal()
{
int i,sum = 0;
for(i=1; i<=m; i++)
{
int x = find(gra[i].i);
int y = find(gra[i].j);
if(x != y)
{
sum += gra[i].len;
p[x] = y;
}
}
int flag = 0;
for(i=1; i<=n; i++)
{
if(find(1) != find(i))
{
flag = 1;
break;
}
}
if(flag)
cout << "? " << endl;
else
cout << sum << endl;
return ;
}
int main()
{
int i,j,a,b,c;
while(cin >> m >> n,m)
{
for(i=1; i<=m; i++)
{
cin >> a >> b >> c;
gra[i].i = a;
gra[i].j = b;
gra[i].len = c;
}
for(i=1; i<=n; i++)
p[i] = i;
qsort(gra+1,m,sizeof(gra[0]),cmp);
kruskal();
}
return 0;
}
代码:(prim)
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<vector>
#include<set>
#include<queue>
#include<string>
#include<algorithm>
#include<utility>
#include<functional>
#define MAX 0x7fffffff using namespace std;
int gra[105][105];
int m,n;
void prim()
{
int visit[105],i,j,now,MIN,sum = 0;
int d[105];
memset(visit,0,sizeof(visit));
for(i=1; i<=n; i++)
d[i] = MAX;
d[1] = 0;
visit[1] = 1,now = 1;
for(i=2; i<=n; i++)
{
for(j=1; j<=n; j++)
if(!visit[j] && d[j]>gra[now][j])
d[j] = gra[now][j];
MIN = MAX;
for(j=1; j<=n; j++)
if(!visit[j] && MIN > d[j])
MIN = d[now = j];
visit[now] = 1;
sum += d[now];
}
int flag = 0;
for(i=1; i<=n; i++)
{
if(!visit[i])
{
flag = 1;
break;
}
}
if(flag)
cout << "?" << endl;
else
cout << sum << endl;
}
int main()
{
int i,j,a,b,c;
while(cin >> m >> n,m)
{
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
gra[i][j] = MAX;
for(i=1; i<=m; i++)
{
cin >> a >> b >> c;
gra[a][b] = gra[b][a] = c;
}
prim();
}
return 0;
}
hdu 1863 畅通project kruskal || prim的更多相关文章
- HDU 1863 畅通project (最小生成树是否存在)
题意 中文 入门最小生成树 prim大法好 #include<cstdio> #include<cstring> using namespace std; const int ...
- HDU 1863 畅通工程(Prim,Kruskal,邻接表模板)
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU 1863 畅通工程(Prim算法求解MST)
题目: 省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本.现 ...
- HDU 1863 畅通工程 -Kruskal模版
畅通工程 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 ...
- HDU 1863 畅通工程(Kruskal)
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- hdu 1863 畅通project
#include <stdio.h> #include <string.h> #include <iostream> #include <algorithm& ...
- hdu 1875 畅通project再续(kruskal算法计算最小生成树)
畅通project再续 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- hdu 1863 畅通工程 (并查集+最小生成树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863 畅通工程 Time Limit: 1000/1000 MS (Java/Others) M ...
随机推荐
- Linux GPT分区表16进制实例分析
Linux GPT分区表16进制实例分析 GPT分区表随着win10的普及,已经在越来越多的新电脑上开始使用了.前段时间的新闻有看到说Intel会在后面的新平台中完全取消CSM支持,这也大概相当于后面 ...
- 20180929 北京大学 人工智能实践:Tensorflow笔记07
(完)
- caioj 1080 动态规划入门(非常规DP4:乘电梯)(dp数组更新其他量)
我一开始是这么想的 注意这道题数组下标是从大到小推,不是一般的从小到大推 f[i]表示从最高层h到第i层所花的最短时间,答案为f[1] 那么显然 f[i] = f[j] + wait(j) + (j ...
- 紫书 例题 10-6 UVa 1635 (二项式定理+唯一分解定理)
首先可以发现按照题目的算法最后得出来是一个杨辉三角 如果ai的系数是m的倍数,那么i即为答案 因为这个系数可能很大,而我们只需要判断倍数 所以我们就把m分解质因数,然后判断每一个系数 的质因数的幂是不 ...
- Node实现简单的注册时后端的MVC模型架构
实现一个简单的注册界面后端MVC模型架构 第一步:在生成的express框架的app.js中添加一个路由,代码如下:var api = require('./routes/api'); app.use ...
- centos同步网络北京时间
sudo yum -y install ntpdate ntp sudo ntpdate time.windows.com sudo hwclock -w
- impala jdbc4的group by语句的bug,加上limit没错
这里用的ImpalaJDBC4.jar SELECT field1 alias1 FROM table1 where field1 ='xxxx' group by alias1 这句话impala会 ...
- windows linux 双系统默认启动windows 的几种方法
装了双系统后,在开机时总会有想让一个系统默认启动的时候,一般安装完Ubuntu和XP双系统后,开机时默认的是启动Ubuntu系统,可是当想让XP作为默认启动的系统时怎么办呢? 在早期的Ubuntu系统 ...
- DDR3内存技术原理
随着AMD AM2平台CPU的上市,目前两大处理器巨头均提供了对DDR2内存的支持.不过,DDR2远不是内存技术发展的终点,CPU和内存厂商已经在着手进行DDR3内存的相应准备.DDR2内存的好日子还 ...
- GitHub开源控件的使用合集
Android的加载动画AVLoadingIndicatorView 项目地址: https://github.com/81813780/AVLoadingIndicatorView 首先,在 bui ...