简单最小生成树,畅通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的更多相关文章

  1. HDU 1863 畅通project (最小生成树是否存在)

    题意 中文 入门最小生成树  prim大法好 #include<cstdio> #include<cstring> using namespace std; const int ...

  2. HDU 1863 畅通工程(Prim,Kruskal,邻接表模板)

    畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  3. HDU 1863 畅通工程(Prim算法求解MST)

    题目: 省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本.现 ...

  4. HDU 1863 畅通工程 -Kruskal模版

    畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  5. hdu 1863 畅通工程(Kruskal+并查集)

    畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  6. HDU 1863 畅通工程(Kruskal)

    畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  7. hdu 1863 畅通project

    #include <stdio.h> #include <string.h> #include <iostream> #include <algorithm& ...

  8. hdu 1875 畅通project再续(kruskal算法计算最小生成树)

    畅通project再续 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  9. hdu 1863 畅通工程 (并查集+最小生成树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863 畅通工程 Time Limit: 1000/1000 MS (Java/Others)    M ...

随机推荐

  1. luoguP1462通往奥格瑞玛的道路(二分答案+spfa)

    题意 给出n个点m条边的无向图. 每条边有两个权值a,b; 问在保证从1到n的路径a权值和小于x时,路径上b权值最大值最小为多少. (n≤10000,m≤50000,x≤1000000000) 题解 ...

  2. Linux权限管理(用户、组、文件管理)

    一. Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示. 1. 文件查看类命令cat,tac, head, tail, more, less, ls ,file: -ls : l ...

  3. 深入理解void以及void指针的含义

    void的含义 void即“无类型”,void *则为“无类型指针”,可以指向任何数据类型. void指针使用规范 ①void指针可以指向任意类型的数据,亦即可用任意数据类型的指针对void指针赋值. ...

  4. JS 中深拷贝的几种实现方法

    JS 中深拷贝的几种实现方法1.使用递归的方式实现深拷贝 //使用递归的方式实现数组.对象的深拷贝 function deepClone1(obj) { //判断拷贝的要进行深拷贝的是数组还是对象,是 ...

  5. 题解 P2610 【[ZJOI2012]旅游】

    今天模拟赛考了这道题,那就来水一篇题解吧...(话说提高组模拟赛考什么省选题啊??) 这道题要我们求一条线段最多能经过的三角形数量. 回想小学学过的奥数,老师告诉过我们这样一件事:`点无大小 线无粗细 ...

  6. ArcGIS api for javascript——查找任务-在地图上查找要素

    描述 本例展示了如何使用查找任务搜索数据.本例在地图上用图表显示结果并用DojoX的grid格式化结果为表格样式. FindTask构造函数需要一个ArcGIS Server地图服务的URL.本例使用 ...

  7. java设计模式学习 ----- 单例模式(Singleton)

    单例模式(Singleton) 单例对象(Singleton)是一种经常使用的设计模式. 在Java应用中,单例对象能保证在一个JVM中,该对象仅仅有一个实例存在.单例模式也分三种:懒汉式单例.饿汉式 ...

  8. Codeforces Round #316 (Div. 2) B. Simple Game

    思路:把n分成[1,n/2],[n/2+1,n],假设m在左区间.a=m+1,假设m在右区间,a=m-1.可是我居然忘了处理1,1这个特殊数据.被人hack了. 总结:下次一定要注意了,提交前一定要看 ...

  9. 阿里云aliyunlive视频直播,设置元素浮在视频上方

    视频直播,视频是可以看到了.但是还需要其他的元素,比如聊天内容,小礼物效果,观看人员列表等等.怎样让其他的元素,浮在视频上方呢? 解决方案,通过打开一个frame层,设置body的背景为透明的. 新的 ...

  10. linux 不常用命令及命令组合

    lsof:list open files, sudo lsof | grep deleted:则列出虽然被删除,但还处于打开状态的文件.注意,这些文件占用的空间,只有在这些文件关闭时,才会被释放. m ...