hdu (kruska and prime) 继续畅通工程
题目http://acm.hdu.edu.cn/showproblem.php?pid=1879
复习一下最小生成树的两个基本算法。
由于存在道路是否已修建的问题,如果已修建,那么该条道路的成本即为0.
首先复习一下kruskal,它的思路主要是既然有那么多边,那么多权值(这里即为成本),要求全连通后最小的权值,那么就将权值排序,先从最小的权值看起,
将该权值的对应的两点用并查集合并到一个集合里,然后依次按照权值从小到大的顺序比较下去,如果该权值对应的两点的祖先结点相同,证明这两点已经
连通,如果祖先结点不同,那么证明不在同一个集合里,这两点没连通,那么连通这两点(合并并查集),加上该权值~~。
#include<cstdio>
#include<algorithm>
using namespace std;
#define M 5005
int father[M],r[M];
int a[M],b[M],c[M],d[M];
bool cmp(int i,int j) {return c[i]<c[j];}
int find(int x){
if (x==father[x]) return x;
father[x]=find(father[x]);
return father[x];
}
int kruska(int n){
int i,ans=;
for (i=;i<=n;i++) father[i]=r[i]=i;
sort(r+,r+n+,cmp);、//看懂这个排序,将数组r以数组c从小到大的顺序排,其实就是个结构体
for (i=;i<=n;i++){
int e=r[i];
int sx=find(a[e]);
int sy=find(b[e]);
if (sx!=sy){
ans+=c[e];father[sx]=sy;
}
}
return ans;
}
int main()
{
int n,i;
while (~scanf("%d",&n)&&n){
for (i=;i<=n*(n-)/;i++){
scanf("%d %d %d %d",&a[i],&b[i],&c[i],&d[i]);
if (d[i]) c[i]=;
}
printf("%d\n",kruska(n*(n-)/));
}
return ;
}
然后是prime,它是从某个顶点开始将它加入一个集合中,然后将集合内的顶点与集合外的顶点所构成的所有边中选取权值最小的一条边作为生成树的边,
并将集合外的那个顶点加入到集合中,表示该顶点已连通,然后再用集合内的顶点与集合外的顶点构成的边中找最小的边,并将相应的顶点加入集合中,这样下去直到全部顶点都加入到集合中,
即得最小生成树.
#include<cstdio>
#include<cstring>
using namespace std;
#define M 5005
#define inf 0x3f3f3f3f
int a[M],b[M],c[M],d[M];
int dis[],vis[],mapp[][];
int prime(int n){
int ans=,i,j;
for (i=;i<=n;i++) dis[i]=mapp[][i];
memset(vis,,sizeof(vis));
vis[]=;
for (i=;i<n;i++){
int temp=inf,pos;
for (j=;j<=n;j++){//dis数组表示集合内与集合外的点的最小权值,
if (!vis[j]&&temp>dis[j])
pos=j,temp=dis[j];
}
ans+=dis[pos];
vis[pos]=;
for (j=;j<=n;j++){
if (!vis[j]&&dis[j]>mapp[pos][j])、、更新一遍dis
dis[j]=mapp[pos][j];
}
}
return ans;
}
int main()
{
int n,i,j;
while (~scanf("%d",&n)&&n){
for (i=;i<=n;i++)
for (j=;j<=n;j++)
mapp[i][j]=inf;
for (i=;i<=n*(n-)/;i++){
scanf("%d %d %d %d",&a[i],&b[i],&c[i],&d[i]);
if (d[i]) c[i]=;
mapp[a[i]][b[i]]=mapp[b[i]][a[i]]=c[i];
}
printf("%d\n",prime(n));
}
return ;
}
hdu (kruska and prime) 继续畅通工程的更多相关文章
- Kruskal算法(题目还是:畅通工程)
那还是先把题目丢出来,是HDU上的一道题 畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
- HDU 1233.还是畅通工程-最小生成树(Prime)
还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- ACM: HDU 1874 畅通工程续-Dijkstra算法
HDU 1874 畅通工程续 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Desc ...
- HDU 1875 畅通工程再续 (prim最小生成树)
B - 畅通工程再续 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit S ...
- hdu 1874 畅通工程续
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1874 畅通工程续 Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过 ...
- hdu 1874 畅通工程续 Dijkstra
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 题目分析:输入起点和终点,顶点的个数,已连通的边. 输出起点到终点的最短路径,若不存在,输出-1 ...
- hdu 1879 继续畅通工程
/************************************************************************/ /* hdu 1879 继续畅通工程 Time L ...
- HDU 畅通工程系列
畅通工程系列都是比较裸的最小生成树问题,且是中文题目,不赘述了. 1.HDU 1863 畅通工程 题意:一个省有很多村庄,其中一些之间是可以建公路的,每条公路都需要不同的代价,问代价最小的情况下将所有 ...
- HDU 1232(畅通工程)题解
以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] 给定一具有N个节点的图和其边集,求其集合数量. [题目分析] 并查集经典题...其实就是创建好并查集就行了.. [算法流程] 于 ...
随机推荐
- 创建springboot项目步骤
步骤:
- 机器学习之overfiting
有错欢迎指正,别让小弟继续错下去. 我们在使用机器学习过程中,经常会overfiting,overfiting的产生原因是noise.训练样本大的话,还好,不用考虑这个 问题.但是,当数据量小的时候, ...
- spring-boot-devtools Idea 热部署
1 pom.xml文件 注:热部署功能spring-boot-1.3开始有的 <!--添加依赖--> <dependency> <groupId>org.sprin ...
- EF CodeFirst学习笔记004--足够聪明
将BlogTypes注释掉,但因为Blogs中定义了BlogType 这样类型的属性,所以Ef会聪明的找到BlogType类. public class BlogEntities:DbContext ...
- 制作u盘kali系统启动盘
准备好一个容量大于8G的u盘,和kali系统的镜像文件. 下载universal-usb-install软件,打开设置如下,create等待几分钟. 下载minitool分区工具,插入u盘,打开min ...
- SpringMVC参考
史上最简单的 Spring MVC http://blog.csdn.net/column/details/14594.html
- Js笔记(对象,构造函数,原型,原型链,继承)及一些不熟悉的语法
对象的特性: 1.唯一标识性,即使完全不一样的对象,内存地址也不同,所以他们不相等 2.对象具有状态,同一个对象可能处在不同状态下 3.对象具有行为,即对象的状态可能因为他的行为产生变迁 Js直到es ...
- LibreOJ 6282. 数列分块入门 6
题目链接:https://loj.ac/problem/6282 参考博客:http://www.cnblogs.com/stxy-ferryman/p/8560551.html 这里如果用数组的话元 ...
- 154. Find Minimum in Rotated Sorted Array II (Array; Divide-and-Conquer)
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...
- Codeforces Beta Round #57 (Div. 2)
Codeforces Beta Round #57 (Div. 2) http://codeforces.com/contest/61 A #include<bits/stdc++.h> ...