首页 > 其他分享 >hdu:继续畅通工程(kruskal的MST并查集实现)

hdu:继续畅通工程(kruskal的MST并查集实现)

时间:2022-12-14 18:13:34浏览次数:47  
标签:hdu return int kruskal 查集 fa 村庄 畅通 include

Problem Description
省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。现得到城镇道路统计表,表中列出了任意两城镇间修建道路的费用,以及该道路是否已经修通的状态。现请你编写程序,计算出全省畅通需要的最低成本。

Input
测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( 1< N < 100 );随后的 N(N-1)/2 行对应村庄间道路的成本及修建状态,每行给4个正整数,分别是两个村庄的编号(从1编号到N),此两村庄间道路的成本,以及修建状态:1表示已建,0表示未建。

当N为0时输入结束。

Output
每个测试用例的输出占一行,输出全省畅通需要的最低成本。

 

输入样例

3
1 2 1 0
1 3 2 0
2 3 4 0
3
1 2 1 0
1 3 2 0
2 3 4 1
3
1 2 1 0
1 3 2 1
2 3 4 1
0
 

输出样例

3
1
0

kruskal的并查集实现
附ac代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int fa[200];
struct cun
{
    int qi;
    int zhi;
    int length;
}c[5100];
bool cmp(cun m,cun n)
{
    return m.length<n.length;
}
int find(int m)
{
    int k,r;
    k=m;
    while(fa[m]!=m)
    {
        m=fa[m];
    }
//找到最终父节点后讲过程中所以节点的父节点赋值为最终点 while(fa[k]!=m) { r=k; k=fa[k]; fa[r]=m; } return m; } void merge(int m,int n) { fa[m]=n; } bool pd(int m) { int p=0;//p要置为0 for(int i=1;i<=m;++i) {if(find(i)==i) p++; if(p>1) return 0; } return 1; } void mst(int n) { int n1=n*(n-1)/2; sort(c,c+n1,cmp); int f1,f2,ans=0; for(int i=0;i<n1;++i) { f1=find(c[i].qi);f2=find(c[i].zhi); if(f1!=f2) { merge(f1,f2);ans+=c[i].length; } } printf("%d\n",ans); } int main() { int n; bool jian; while(scanf("%d",&n)==1) { if(n==0) break; for(int i=1;i<=n;++i) fa[i]=i; for(int i=0;i<n*(n-1)/2;++i) {scanf("%d%d%d",&c[i].qi,&c[i].zhi,&c[i].length); cin>>jian; if(jian) merge(c[i].qi,c[i].zhi); } mst(n); } }

 

标签:hdu,return,int,kruskal,查集,fa,村庄,畅通,include
From: https://www.cnblogs.com/ruoye123456/p/16982870.html

相关文章

  • hdu:小希的迷宫(并查集)
    ProblemDescription上次Gardon的迷宫城堡小希玩了很久,现在她也想设计一个迷宫让Gardon来走。但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说......
  • HDU4801——思维,生成树(口糊)
    //题意:有坐标图上有N个点,每个点有一个收益,要求修n-1条路联通所有点。现在有一个免单机会,即免除一条路的花费,求max(免除花费的路的两端点的收益和/n-1条路的总花费)//思路:......
  • 图论-堆-并查集-2503. 矩阵查询可获得的最大分数
    2503.矩阵查询可获得的最大分数DescriptionDifficulty:困难RelatedTopics:给你一个大小为mxn的整数矩阵grid和一个大小为k的数组queries。找出一个大小......
  • 现在有一个并查集,你需要完成合并和查询操作。
    输入格式:第一行包含两个整数N,M,表示共有N个元素和M个操作。接下来M行,每行包含三个整数zi,xi,yi。当zi=1时,将xi与yi所在的集合合并。当zi=2时,输出xi与yi......
  • hdu:解方程(二分查找)
    ProblemDescription给定方程8x^4+7x^3+2x^2+3x+6==Y,请计算x在[0,100]范围内的解。Input输入数据首先是一个正整数T(1<=T<=100),表示有T组测试数据。接下来T......
  • hdu:人见人爱A^B(快速幂)
    ProblemDescription求A^B的最后三位数表示的整数。说明:A^B的含义是“A的B次方”Input输入数据包含多个测试实例,每个实例占一行,由两个正整数A和B组成(1<=A,B<=10000),如果A......
  • hdu:一个新的斐波那契数列
    ProblemDescription现在,有一个新的斐波那契数列,定义如下:F(0)=7,F(1)=11,F(n)=F(n-1)+F(n-2)(n>=2).Input输入包含多组测试样例,每组测试样例包含一个整数n(n......
  • hdu3555 Bomb --数位dp
    原题链接:​​http://acm.hdu.edu.cn/showproblem.php?pid=3555​​题意:1---n之间的数包含49有多少个。分析:看代码。#define_CRT_SECURE_NO_DEPRECATE#include<iostream>#in......
  • hdu2089 不要62--数位dp入门题
    原题链接:​​http://acm.hdu.edu.cn/showproblem.php?pid=2089​​题意:给定a,b两数,求两数之间所有数不含有62和4的个数。分析:dp[i][j]表示i位数,最高位是j的满足题意的个......
  • hdu4739 Zhuge Liang's Mines --状压dp
    原题链接:​​http://acm.hdu.edu.cn/showproblem.php?pid=4739​​题意:n个点,求出可以组成的最多的正方形的点数,要求每个点只能用一次,且正方形边平行坐标轴。分析:把所有点组......