简单最小生成树,畅通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. JZOJ5821手机信号

    用set维护,(l,r,v),注意边界,保证了两个端点l,r一定有信号站 增加有三种可能,1.直接加(没有影响),2.将原本的一个区间变成两个 3.将原本的一个区间变成三个 删除有三种情况,1.全包含 ...

  2. uptime---系统总共运行时间和系统的平均负载

    uptime命令能够打印系统总共运行了多长时间和系统的平均负载.uptime命令可以显示的信息显示依次为:现在时间.系统已经运行了多长时间.目前有多少登陆用户.系统在过去的1分钟.5分钟和15分钟内的 ...

  3. top---实时动态地查看系统的整体运行情况

    top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具.通过top命令所提供的互动式界面,用热键可以管理. 语法 top(选项) 选项 -b:以批处理模式 ...

  4. Unity Shader (四)顶点程序示例

    1.在顶点函数中实现凸起效果 Shader "Custom/Example" { properties { _R(,))= //圆的半径,也是凸起的范围 _OX(,))= //x轴 ...

  5. 【Educational Codeforces Round 37 C】 Swap Adjacent Elements

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 显然l..r这一段连续的1可以把l..r+1变成有序的. 那么就把所有的连续1段变成有序的就好. 看看最后是不是升序即可. [代码] ...

  6. 【转】NPOI使用手册

    [转]NPOI使用手册 NPOI使用手册 目录 1.认识NPOI 2. 使用NPOI生成xls文件 2.1 创建基本内容 2.1.1创建Workbook和Sheet 2.1.2创建DocumentSu ...

  7. POJ 3450--Corporate Identity【KMP &amp;&amp; 枚举】

    Corporate Identity Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 5696   Accepted: 207 ...

  8. VC双缓冲画图技术介绍

    双缓冲画图,它是一种主要的图形图像画图技术.首先,它在内存中创建一个与屏幕画图区域一致的对象,然后将图形绘制到内存中的这个对象上,最后把这个对象上的图形数据一次性地拷贝并显示到屏幕上. 这样的技术能够 ...

  9. google浏览器修改网页字符编码

    google浏览器修改网页字符编码 直接在google浏览器的应用拓展程序里面搜 Charset,第一个就是 于是就有了

  10. Ubuntu 安装软件和centos 对比命令

    之前都是使用Redhat 或者Centos 等rpm的linux  ,开始使用ubuntu 很不习惯 1.  安装命令Centos  : yum install httpd               ...