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个节点的图和其边集,求其集合数量. [题目分析] 并查集经典题...其实就是创建好并查集就行了.. [算法流程] 于 ...
随机推荐
- http://sourceforge.net/projects/rtspdirectshow/
如何做一个解析rtsp协议的h264压缩的实时视频流播放器,带保存功能,目前我有rtsp协议的h264压缩后的实时视频流,目前想开发一个客户端,来播放该实时视频流,同时保存为视频文件,目前似乎有方案是 ...
- Oracle Oracle数据库 迁移到 SQL Server上
原地址:https://blog.csdn.net/LongtengGensSupreme/article/details/81355181
- Oracle数据库操作总是显示运行中无法成功,删除表时报错 resource busy and acquire with NOWAIT specified
1.直接运行以下语句: select t2.username,t2.sid,t2.serial#,t2.logon_timefrom v$locked_object t1,v$session t2wh ...
- canvas画布内部重复画圆
<!DOCTYPE html><html><head> <title>canvas example</title> <meta cha ...
- destoon手机端分页
$pages = ''; $pagesize = 2; $offset = ($page-1)*$pagesize; $rr = $db->get_one("SELECT COUNT( ...
- Spring Cloud Ribbon Client
首先,我们还是先从springcloud官方文档中找下相关说明,如下图所示,可以看到从1.2.0版本(也就是从Spriing Cloud Camden)之后,新增了这个通过配置文件来配置负载均衡的功能 ...
- Bootstrap Popover
[Bootstrap Popover] 1.设置一个popover需要添加以下设置: 1)data-toggle="popover" 2)title="Example p ...
- chromedriver和chrome匹配的版本
- java执行jar包出错:Unable to access jarfile
java执行jar包出错:Unable to access jarfile 错误的原因有多种: 1.一般都是路径不正确.在Windows中,正确的路径类似于: java -jar "D:\W ...
- :after伪类+content经典应用举例
:after伪类+content 清除浮动的影响 .box{padding:10px; background:gray;} .l{float:left;} <div class="bo ...