#include<stdio.h>
#include<math.h>
#include<string.h>
const int qq=+,MAX=1e7;
int vis[qq];
int lowcost[qq][qq];
int minimum[qq];
int n;
void prim()
{
int minx,k;
int sum=;
vis[]=;
for(int i=;i<=n+;++i)
minimum[i]=lowcost[][i];
for(int i=;i<n;++i){
minx=MAX;
for(int j=;j<=n;++j)
if(!vis[j] && minx > minimum[j]){
minx=minimum[j];
k=j;
}
vis[k]=;
sum+=minx;
for(int l=;l<=n;++l)
if(!vis[l] && minimum[l] > lowcost[k][l])
minimum[l]=lowcost[k][l];
}
printf("%d\n",sum);
}
int main()
{
while(~scanf("%d",&n)&&n){
for(int i=;i<=n+;++i)
minimum[i]=MAX;
for(int j,i=;i<=n+;++i)
for(j=;j<=n+;++j)
lowcost[i][j]=MAX;
for(int i=;i<=n+;++i)
vis[i]=;
int i,j,cost,mark;
for(int l=;l<=n*(n-)/;++l){
scanf("%d %d %d %d",&i,&j,&cost,&mark);
if(mark==){
lowcost[i][j]=lowcost[j][i]=; //已经存在路径的话直接权值为0
}
else
lowcost[i][j]=lowcost[j][i]=(i==j)?:cost;
}
prim();
}
}

最开始调试的时候好像memset函数使用错误,我把第二个参数写的MAX开始RE或者PE, 最后迫于无奈,直接用循环来初始化

后来标记已经存在的路径vis分别标记i,j为1;这样我就分了三种情况讨论第一是已经标记过的点位0个,第二是已经标记过的点位n个,0~n之间就是第三种情况,调了半天发现WA了几次、最后还是直接套用prim算法来的准确,所以就说已存在路径的值直接赋值0好了

HDU 1879 还是prim最小生成树、的更多相关文章

  1. hdu 1879 继续通畅工程(最小生成树)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1879 /************************************************* ...

  2. hdu 1879 继续畅通工程

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

  3. Prim 最小生成树算法

    Prim 算法是一种解决最小生成树问题(Minimum Spanning Tree)的算法.和 Kruskal 算法类似,Prim 算法的设计也是基于贪心算法(Greedy algorithm). P ...

  4. HDU 5723 Abandoned country 最小生成树+搜索

    Abandoned country Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  5. dijkstra(最短路)和Prim(最小生成树)下的堆优化

    dijkstra(最短路)和Prim(最小生成树)下的堆优化 最小堆: down(i)[向下调整]:从第k层的点i开始向下操作,第k层的点与第k+1层的点(如果有)进行值大小的判断,如果父节点的值大于 ...

  6. HDU 2489 Minimal Ratio Tree (dfs+Prim最小生成树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2489 Problem Description For a tree, which nodes and ...

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

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

  8. HDU 1863 畅通工程(最小生成树,prim)

    题意: 给出图的边和点数,要求最小生成树的代价,注:有些点之间是不可达的,也就是可能有多个连通图.比如4个点,2条边:1-2,3-4. 思路: 如果不能连通所有的点,就输出‘?’.之前以为每个点只要有 ...

  9. 【HDU 4463 Outlets】最小生成树(prim,kruscal都可)

    以(x,y)坐标的形式给出n个点,修建若干条路使得所有点连通(其中有两个给出的特殊点必须相邻),求所有路的总长度的最小值. 因对所修的路的形状没有限制,所以可看成带权无向完全图,边权值为两点间距离.因 ...

随机推荐

  1. selenium(2):环境搭建完成后,初步运行遇到的问题

    检验是否搭建成功. . 问题一:运行时候,报错:请停用以开发者模式运行的扩展程序 出现错误如下: 原因:chromedriver的版本号过低了. 解决办法:应该安装与chrome版本对应的chrome ...

  2. LintCode_175 翻转二叉树

    题目 翻转一棵二叉树 您在真实的面试中是否遇到过这个题? Yes 样例 1 1 / \ / \ 2 3 => 3 2 / \ 4 4 和前序遍历代码很相似从叶子节点依次翻转递归到根节点C++代码 ...

  3. Mac上homebrew使用

    一.官方网址 Homebrew 二.目录 安装 查看帮助信息 查看版本 更新Homebrew自己 安装软件包 查询可更新的包 更新包 (formula) 清理旧版本 锁定不想更新的包 卸载安装包 查看 ...

  4. git命令入门

    http://www.cocoachina.com/ios/20160629/16855.html 译者序:这是一篇给像我这样的新手或者是熟悉图形工具的老鸟看的.仅作为快速入门的教程. git 现在的 ...

  5. 洛谷P1063 能量项链 [2006NOIP提高组]

    P1063 能量项链 题目描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标 记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子 ...

  6. 利用JDBC连接Oracle数据库(转)

    http://blog.csdn.net/wahaha1_/article/details/8512438 JDBC是Sun公司制定的一个可以用Java语言连接数据库的技术. 一.JDBC基础知识 J ...

  7. spring - constructor-arg的常规用法

     1.使用构造子注入时,则使用constructor-arg子标签,来指定构造函数的参数.    <bean id="provider" class="com.ap ...

  8. AtCoder Regular Contest 084 C - Snuke Festival【二分】

    C - Snuke Festival ....最后想到了,可是不应该枚举a[],这样要二重循环,而应该枚举b[],这样只需一重循环... #include<iostream> #inclu ...

  9. android 重写系统进度条

    转载自http://blog.csdn.net/codingandroid/article/details/8495074 自定义progressbar现在要自定义一个等待的时候转动的小圈,相信大家也 ...

  10. python 解释器编码