HDU

来源:互联网 发布:node v4.6.0 x64.msi 编辑:程序博客网 时间:2024/06/04 19:24

HDU - 1233 还是畅通工程 

某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。

Input
测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离。为简单起见,村庄从1到N编号。
当N为0时,输入结束,该用例不被处理。
Output
对每个测试用例,在1行里输出最小的公路总长度。
Sample Input
3
1 2 1
1 3 2
2 3 4
4
1 2 1
1 3 4
1 4 1
2 3 3
2 4 2
3 4 5
0
Sample Output
3
5

题意:还是传统的畅通工程题目。

题解:以为是正常的解法,没想到数据并不是100...需要用kruskal算法处理1000000的数据,直接kruskal就AC了。

AC代码:

#include<cstdio>#include<cmath>#include<iostream>#include<algorithm>using namespace std;const int maxn = 100007;int sum;struct node{    int r,l,cost;}E[maxn];bool cmp(node a,node b){    return a.cost<b.cost;}int n,m;int fa[maxn];int fi(int x){    return fa[x]==x?x:fa[x]=fi(fa[x]);}void unionset(int x,int y){    int p1=fi(x);    int p2 = fi(y);    if(p1==p2)return ;    fa[p1]=p2;}void kruskal(){    sort(E+1,E+1+m,cmp);    for(int i=1;i<=m;i++)    {        if(fi(E[i].r)!=fi(E[i].l))sum+=E[i].cost;        unionset(E[i].l,E[i].r);    }}int main(){    while(cin>>n)    {        if(!n)break;        sum=0;        m=n*(n-1)/2;        for(int i=1;i<=m;i++)        {            fa[i]=i;        }        for(int i=1;i<=m;i++)        {            cin>>E[i].l>>E[i].r>>E[i].cost;        }        kruskal();        cout<<sum<<endl;    }    return 0;}



原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 wps提示公式错误怎么办 pdf字体太小怎么办 kindle屏幕碎了怎么办 kindle内存太小怎么办 百度云解压和谐怎么办 电脑上没有pdf怎么办 word转txt乱码怎么办 双珠卷发器怎么办用 pdf打印出来很小怎么办 热敏打印机无法打印怎么办 pdf格式不能打印怎么办 pdf文件没有打印怎么办 打印机添加不上怎么办 笔记本电脑收不到wifi怎么办 账套输出不了怎么办 无法加载pdf文档怎么办 pdf控件不可用怎么办 扫描件不清晰怎么办 图片大于200k怎么办 手机图片字模糊怎么办 天然气手册丢了怎么办 消消乐登录异常怎么办 新手想学考古怎么办 省份证改名字怎么办 文曲星放太久开不了机怎么办 小狗吃火腿肠皮怎么办 虚火引起的牙痛怎么办 牙髓炎怎么办立刻止疼 小蜜丸吃不下去怎么办 铜钱的字不认识怎么办 古钱币出手好烦怎么办 安装目录不可写怎么办 手机不支持exfat格式怎么办 windows7图标变大了怎么办 igs格式烂曲面怎么办 手机桌面文件夹打不开怎么办 苹果下载不了150怎么办 iphone6速度变慢怎么办 苹果手机微信打不开pdf怎么办 苹果手机打不开pdf怎么办 pdf文件超过了怎么办