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 ...
随机推荐
- win10如何设置开机自动启动热点WIFI?
1.编写脚本文件(先新建txt文件,编写代码内容netsh wlan start hostednetwork,最后重命名成HotSpot.bat):文件名称:HotSpot.bat,代码内容: net ...
- 今日SGU 6.5
sgu 160 题意:给你n个数字 数字范围 1 到 m 问你从中取出任意数量的数字使得这些数字的积取模m最大 收获:dp,记录dp的路径 #include<bits/stdc++.h> ...
- [洛谷P3121] 审查(黄金) (AC自动机)
题目描述 FJ把杂志上所有的文章摘抄了下来并把它变成了一个长度不超过10^5的字符串S.他有一个包含n个单词的列表,列表里的n个单词记为t_1...t_N.他希望从S中删除这些单词. FJ每次在S中找 ...
- Object-C,循环语句for,while,do-while
演示循环语句,for,while,do-while,和C系列的语言,语法基本一致1到10,求和 // // main.m // for-while // // Created by fansunion ...
- rhcs clustat
http://www.cnblogs.com/jyzhao/p/4775942.html https://access.redhat.com/documentation/zh-CN/Red_Hat_E ...
- 二 JDK + mysql + yum + rpm
如果系统环境崩溃. 调用/usr/bin/vim /etc/profile 1 网络搭建 2 host配置 3 SSH无密码登录 4 rpm 安装 yum install ...
- POJ 1035-Spell checker(字符串)
题目地址:POJ 1035 题意:输入一部字典.输入若干单词. 若某个单词能在字典中找到,则输出corret.若某个单词能通过 变换 或 删除 或 加入一个字符后.在字典中找得到.则输出这些单词.输出 ...
- 利用photoshop的动作功能实现图片批处理操作
首先,通过"窗体菜单"点击"动作".启动动作栏. 然后.通过动作栏的菜单,新建动作. 接着,完毕一个标准操作,包含打开图像,图像处理或者格式转换,另存为,等. ...
- 《R实战》读书笔记一
你仅仅要想处理数据,<R实战>这本书就能够助你一臂之力. <R实战>的目标是让你认识R,而且可以对数据进行操作.可视化和理解.该书包含4部分16个章节8个附录. 第一部分:入门 ...
- Redis封装之Set
RedisSetService: /// <summary> /// Set:用哈希表来保持字符串的唯一性,没有先后顺序,存储一些集合性的数据 /// 1.共同好友.二度好友 /// 2. ...