zoukankan      html  css  js  c++  java
  • HDU-1863-畅通工程

    题目链接

    http://acm.hdu.edu.cn/showproblem.php?pid=1863

    并查集可做      并查集:我的理解就是找两个点的祖宗节点如果它们的祖宗不相同,则一个祖宗当父亲,一个祖宗当儿子。最后查找有多少个独立祖宗,只有一个的话

    则说明它们全部连通,

    这题的思路就是这样的,题目容易,直接看代码。

    代码

    #include<stdio.h>
    #include<iostream>
    #include<algorithm>
    using namespace std;

    struct node
    {
    int x,y,d;
    }s[5000];

    bool cmp(const node &a,const node &b)
    {
    return a.d<b.d;
    }

    int father[111];
    int sum;

    int Find(int x)
    {
    if(x==father[x]) return x;
    Find(father[x]);
    }

    void Union(int x,int y,int d)
    {
    x=Find(x);
    y=Find(y);
    if(x!=y)
    {
    father[x]=y;
    sum=sum+d;
    }
    }

    int main(void)
    {
    int n,m,i,j,k;
    while(scanf("%d%d",&n,&m)==2&&n)
    {
    sum=0;
    for(i=0;i<n;i++)
    scanf("%d%d%d",&s[i].x,&s[i].y,&s[i].d);
    sort(s,s+n,cmp);
    for(i=1;i<=m;i++)
    father[i]=i;
    for(i=0;i<n;i++)
    Union(s[i].x,s[i].y,s[i].d);
    k=0;
    for(i=1;i<=m;i++)
    {
    if(father[i]==i)
    k++;
    }
    if(k>1)
    printf("? ");
    else
    printf("%d ",sum);
    }
    return 0;
    }
    参数
    15MS 352K 982 B

  • 相关阅读:
    python_day3
    python-day2
    python-day1
    【收集】安卓手机在市场占比的网址查找
    while循环
    switch多选择结构
    if选择结构
    顺序结构
    Scanner:求和 、求平均值
    Scanner:用户交互
  • 原文地址:https://www.cnblogs.com/liudehao/p/4111416.html
Copyright © 2011-2022 走看看