题目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) 继续畅通工程的更多相关文章

  1. Kruskal算法(题目还是:畅通工程)

    那还是先把题目丢出来,是HDU上的一道题 畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Jav ...

  2. HDU 1233.还是畅通工程-最小生成树(Prime)

    还是畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  3. ACM: HDU 1874 畅通工程续-Dijkstra算法

    HDU 1874 畅通工程续 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Desc ...

  4. HDU 1875 畅通工程再续 (prim最小生成树)

    B - 畅通工程再续 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit S ...

  5. hdu 1874 畅通工程续

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1874 畅通工程续 Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过 ...

  6. hdu 1874 畅通工程续 Dijkstra

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 题目分析:输入起点和终点,顶点的个数,已连通的边. 输出起点到终点的最短路径,若不存在,输出-1 ...

  7. hdu 1879 继续畅通工程

    /************************************************************************/ /* hdu 1879 继续畅通工程 Time L ...

  8. HDU 畅通工程系列

    畅通工程系列都是比较裸的最小生成树问题,且是中文题目,不赘述了. 1.HDU 1863 畅通工程 题意:一个省有很多村庄,其中一些之间是可以建公路的,每条公路都需要不同的代价,问代价最小的情况下将所有 ...

  9. HDU 1232(畅通工程)题解

    以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] 给定一具有N个节点的图和其边集,求其集合数量. [题目分析] 并查集经典题...其实就是创建好并查集就行了.. [算法流程] 于 ...

随机推荐

  1. asp.net4.0

    asp.net4.0安装路径:C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i

  2. 吴裕雄 16-MySQL UNION 操作符

    描述MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中.多个 SELECT 语句会删除重复的数据. 语法MySQL UNION 操作符语法格式:SELECT ...

  3. Applese的毒气炸弹-最小生成树Kruskal算法

    链接:https://ac.nowcoder.com/acm/contest/330/G来源:牛客网 题目描述 众所周知,Applese 是个很强的选手,它的化学一定很好. 今天他又AK了一套题觉得很 ...

  4. 手工命令行 搭建 hadoop 和 spark 环境

    环境准备:3台CentOS7,64位,Hadoop2.7需要64位Linux 192.168.20.161  192.168.20.162  192.168.20.163 三台机器分别叫host01. ...

  5. OWAPSP_ZAP使用

    启动OWAPSP_ZAP后 netstat -pantu | grep 8080

  6. .resources文件转为可视化.resx文件

    ResGen.exe启动闪退.--方法不对 参考:http://www.opdown.com/soft/101205.html 在cmd中启动ResGen.exe. 打开cmd:输入 C:\Windo ...

  7. 8个纯CSS3制作的动画应用及源码

    对于一个复杂的图形或者动画来说,之前我们的处理方式是图片叠加或者利用CSS+JavaScript的方法,然而随着CSS3标准的不断成熟,我们甚至完全可以利用CSS3来绘制一些图片和制作丰富的动画特效. ...

  8. Failed to start LSB: Bring up/down networking 问题

    Failed to start LSB: Bring up/down networking 问题   1.执行 service network restart 出现以下错误 Restarting ne ...

  9. docker save 批量导出脚本

    [root@vultr home]# cat docker_sove.sh docker images > images.txtawk '{print $1}' images.txt > ...

  10. TOJ3955: NKU ACM足球赛(并查集+map+细节题)

    时间限制(普通/Java):5000MS/15000MS     内存限制:65536KByte 描述 NKU ACM最近要举行足球赛,作为此次赛事的负责人,Lee要对报名人员进行分队.分队要遵循如下 ...