本题链接:

pid=1879http://">点击打开链接

本题大意:

输入n行数据。每行数据前两个表示该条路连通的两个村庄的编号,第三个表示修该条路的成本。最后的0或1表示该路未修或已修过,求在此道路基础上要使道路畅通的最小成本。

解题思路:

本题基本上也是使用的kruskal算法,仅仅是多加了一个道路状态,无论该路已修或未修,都要把它连到树上。然后就是看加不加成本的问题。

抑或採取一种方法。当道路已修。直接把成本改为0。然后依照常规kruskal算法写就可以;本代码未用此法,详细请參见代码:

#include<stdio.h>
#include<algorithm>
using namespace std;
int per[110];
int n;
struct node{
int u,v,w,p;
}a[5000];
int cmp(node a,node b)
{
return a.w<b.w;
}
void init()
{
for(int i=1;i<=n;i++)
per[i]=i;
}
int find(int x)
{
if(x==per[x])
return x;
else
return per[x]=find(per[x]);
}
int join(node a[],int m)
{
int sum=0;
for(int i=0;i<m;i++)
{
int fx=find(a[i].u);
int fy=find(a[i].v);
if(fx!=fy)
{
per[fx]=fy;
if(!a[i].p)
sum+=a[i].w;
}
}
return sum;
}
int main()
{
while(scanf("%d",&n)!=EOF&&n)
{
int m=n*(n-1)/2;
init();
for(int i=0;i<m;i++)
{
scanf("%d%d%d%d",&a[i].u,&a[i].v,&a[i].w,&a[i].p);
if(a[i].p)
{
int fx=find(a[i].u);
int fy=find(a[i].v);
if(fx!=fy)
per[fx]=fy;
}
}
sort(a,a+m,cmp);
printf("%d\n",join(a,m));
}
return 0;
}

hdu 1879 继续畅通project的更多相关文章

  1. hdu 1879 继续畅通工程

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

  2. hdu 1879 继续畅通工程 (并查集+最小生成树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1879 继续畅通工程 Time Limit: 2000/1000 MS (Java/Others)    ...

  3. hdu 1233 还是畅通project (克鲁斯卡尔裸题)

    还是畅通project                                              Time Limit: 4000/2000 MS (Java/Others)    M ...

  4. HDU 1863:畅通project(带权值的并查集)

    畅通project Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  5. hdu 1233(还是畅通project)(prime算法,克鲁斯卡尔算法)(并查集,最小生成树)

    还是畅通project Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tota ...

  6. hdu 1233 还是畅通project(kruskal求最小生成树)

    还是畅通project Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tota ...

  7. 杭电1879继续畅通project

    继续畅通project Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  8. hdu 1879 继续畅通工程 解题报告

    题目链接:http://code.hdu.edu.cn/showproblem.php?pid=1879 这条题目我的做法与解决Constructing Roads的解法是相同的. 0 表示没有连通: ...

  9. HDU 1879 继续畅通工程 (Prim(普里姆算法)+Kruskal(克鲁斯卡尔))

    继续畅通工程 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

随机推荐

  1. 第十三章:MFC库与Windows程序开发概述

    主要内容: 1.Windows程序的基本结构 2.MFC库简介 3.使用Visual C++开发Windows程序 具体内容略

  2. python基础知识07-函数作用域和匿名函数

    1.匿名函数 list(filter(lamda a:a>3,[1,2,3,4,5])) 一般和过滤器一起使用 2.函数的作用域 a = 123 def test(): a = 666 a = ...

  3. python初体验 ——>>> 模拟体育竞技

    python初体验 ——>>> 模拟体育竞技 一.排球训练营 1. 简介: 模拟不同的两个队伍进行排球的模拟比赛. 2. 模拟原理: 通过输入各自的能力值(Ⅰ),模拟比赛的进行( P ...

  4. 「问题思考」python的递归中return返回none

    代码: #求最大公约数 def gcd(x,y): if x < y: swap = x x = y y = swap if x%y == 0: return y else: gcd(y,x%y ...

  5. 【笔记】ubuntu如何切换到root用户&&linux如何关闭各种保护

    默认安装完成之后并不知道root用户的密码,那么如何应用root权限呢? (1)sudo 命令   这样输入当前管理员用户密码就可以得到超级用户的权限.但默认的情况下5分钟root权限就失效了. () ...

  6. Java集合之Queue

    queue 定义 C++:queue Java:Queue 创建与其基本操作 创建: Queue<Integer> q=new LinkedList<Integer>(); 数 ...

  7. 【UVA 1636】 (条件概率)

    题链:https://cn.vjudge.net/problem/UVA-1636 题意 给出一把枪的子弹序列,已知开了一枪且无子弹,问下一步的决策是旋转,还是开下一枪 题解 已知开一枪没子弹,下一枪 ...

  8. 配置工程文件dll编译后copy路径

    放到工程文件的最后面的配置节点: 下面的配置节点中生成路径换成实际的相对路径就可以了 修改:Prject.csproj 文件里面的配置节点  project配置节点里面的最后面 <Target ...

  9. luogu3960 列队

    参考这篇 #include <iostream> #include <cstdio> #include <vector> using namespace std; ...

  10. 在JavaScript中获取Map集合中的key和value值(前提是:既不知道key为什么值,也不知道value有哪些值)