hdu--1232 继续通畅工程

wa了8次,超级崩溃,险些自闭,不过倒是学到了很多,先来一段代码:

#include<bits/stdc++.h>
using namespace std;
int p[1000];            //储存查并集
int n,m;
struct node{            //数组结构体,排序距离
    int a,b;
    int d;
}v[100000];
bool cmp(node x,node y)
{
    return x.d<y.d;
}
int find(int x)
{
    int re=x;
    while(p[re]!=re)
    {
        re=p[re];
    }
    return re;
}
void join(int x,int y)
{
    int dx=find(x);
    int dy=find(y);
    if(dx!=dy)
    p[dx]=dy;
}
int main()
{
    ios::sync_with_stdio(false);
    while(cin>>n && n)          //N(N-1)/2条路,n个村庄,n!=0
    {
        m=n*(n-1)/2;
        for(int i=1;i<=n;i++)    //初始化p
            p[i]=i;
        for(int i=0;i<m;i++)        //N(N-1)/2组输入
            scanf("%d%d%d",&v[i].a,&v[i].b,&v[i].d);  //输入
        sort(v,v+m,cmp);         //排序距离,从小到大
        int sum=0;
        for(int i=0;i<m;i++)
        {
            if(find(v[i].a)!=find(v[i].b))   //if此时最小距离代表的两个村庄间不连通
            {
                join(v[i].a,v[i].b);                   //连通这两个村庄
                sum+=v[i].d;              //总距离+ 此时最小距离
            }
        }
        printf("%d\n",sum);
    }
    return 0;
}

首先不用管最后hint,这道题就用cin,cout就可以过

其次是这个加速c++输入的语句,用前1300ms,用后300ms,妈妈再也不用担心我的没法飙车了

ios::sync_with_stdio(false);

加速,加速!(~耶~~逮虾户~~)

再然后,就是这个函数最好不要和scanf连用,否则会疯狂的wa wa(比如上述代码>_<)。

最后一点就是这个并查集,最小生成树的模板要记住。

以上。

———2019/8/5 13:04:47;

原文地址:https://www.cnblogs.com/zjydeoneday/p/11302366.html

时间: 2024-10-10 18:10:08

hdu--1232 继续通畅工程的相关文章

hdu 1874 通畅工程续

Description某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多.这让行人很困扰. 现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离. Input本题目包含多组数据,请处理到文件结束.每组数据第一行包含两个正整数N和M(0<N<200,0<M<1000),分别代表现有城镇的数目 和 已修建的道路的数目.城镇分别以0-N-1编号.

HDU 1232 畅通工程(并查集)

畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 30485    Accepted Submission(s): 16013 Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都可以实现交通(但不一定有

hdu 1863 通畅工程

Description省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本.现请你编写程序,计算出全省畅通需要的最低成本. Input测试输入包含若干测试用例.每个测试用例的第1行给出评估的道路条数 N.村庄数目M ( < 100 ):随后的 N行对应村庄间道路的成本,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间道路的成本(也是正整数).为简单起见,

HDU - 1232 畅通工程 HDU - 1874畅通工程续 HDU - 1875畅通工程再续

题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1232 题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1874 题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1875 畅通工程属于水题,直接用并查集就行,加个路径压缩那就更好. 畅通工程续这道题WA了N次,因为有一个地方没注意到就是一个城镇到另外一个城镇的有多条道路, 所以你一开始就要把最短的道路选出来.

hdu 1232 畅通工程(最小生成树)

Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可).问最少还需要建设多少条道路? Input 测试输入包含若干测试用例.每个测试用例的第1行给出两个正整数,分别是城镇数目N ( < 1000 )和道路数目M:随后的M行对应M条道路,每行给出一对正整数,分别是该条道路直接连通的两个城镇的编号.为简单起见,城镇从1

HDU 1232(畅通工程)题解

以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] 给定一具有N个节点的图和其边集,求其集合数量. [题目分析] 并查集经典题...其实就是创建好并查集就行了.. [算法流程] 于是这里就是放并查集的基本内容的..用一个数组的下标来对应节点,值来对应其父节点,并查集英文是Disjoint Sets,就叫DJSet好了XD 1 int getDjSetPar(int id) { //取得某节点的父节点 2 if (dj[id]==id) return id; 3 else re

HDU 1232:畅通问题(并查集)

畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 29362    Accepted Submission(s): 15452 Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都可以实现交通(但不一定有

HDU 1879 继续畅通工程

Description省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).现得到城镇道路统计表,表中列出了任意两城镇间修建道路的费用,以及该道路是否已经修通的状态.现请你编写程序,计算出全省畅通需要的最低成本. Input测试输入包含若干测试用例.每个测试用例的第1行给出村庄数目N ( 1< N < 100 ):随后的 N(N-1)/2 行对应村庄间道路的成本及修建状态,每行给4个正整数,分别是两个村庄的编号(从1编号到N)

[2016-04-13][HDU][1233][还是畅通工程]

时间:2016-04-13 23:56:49 星期三 题目编号:[2016-04-13][HDU][1233][还是畅通工程] 题目大意:求最小生成树 分析:直接kruskal #include<cstdio> #include<algorithm> using namespace std; const int maxn = 100 + 10; int fa[maxn]; struct Edge{ int u,v,c; Edge(int _u= 0,int _v=0,int _c=

【裸MST:prim+邻接矩阵 / Kruskal+邻接表】hdu 1233 还是畅通工程

Source : hdu 1233 还是畅通工程 http://acm.hdu.edu.cn/showproblem.php?pid=1233 Problem Description 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小.请计算最小的公路总长度. Input 测试输入包含若干测试用例.每个测试用例的第1行给出村庄