hdu1863

#include<cstdio>
#include<algorithm>
using namespace std;
int N,M;
struct edge { int u,v,cost;
    bool operator < (const edge& rhs) const
    {
        return cost < rhs.cost;
    }

};
edge es[110];
int sett[110];
int find2(int x)
{
    if(sett[x] == x ) return x;
    else return sett[x] = find2(sett[x]);
}
void unite(int x,int y)
{
    x =find2(x);
    y =find2(y);
    if(x<y) sett[y]=x;
    else sett[x]=y;
}
bool same(int x,int y)
{
    return find2(x)==find2(y);
}
int kruskal()
{
    sort(es,es+N);
    for(int i=0;i<=M;i++) sett[i]=i;
    int res=0;
    int num=0;
    for(int i=0;i<N;i++){
        edge e = es[i];
        if( !same(e.u, e.v) )
        {
            unite(e.u,e.v);
            res+=e.cost;
            num++;
        }
    }
//    printf("%d%d",num,M);
    if(num < M-1) printf("?\n");
    else printf("%d\n",res);
}
int main()
{
    while(scanf("%d%d",&N,&M)&&N )
    {
        for(int i=0;i<N;i++)
            scanf("%d%d%d",&es[i].u,&es[i].v,&es[i].cost);
        kruskal();
    }
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-24 23:09:45

hdu1863的相关文章

ACM-最小生成树之畅通工程——hdu1863

畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 15572    Accepted Submission(s): 6462 Problem Description 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出

HDU1863 - 畅通工程 Prim最小生成树算法

HDU1863 - 畅通工程:http://acm.hdu.edu.cn/showproblem.php?pid=1863 这题我中午用并查集的方法AC了一次,下午学了Prim.换个姿势,再来一次 = =! 并查集的方法:http://blog.csdn.net/p_rogrammer/article/details/47979073 代码: #include <iostream> #include <cstdio> #include <vector> #include

hdu1863(最小生成树)

很裸的最小生成树,但要注意判断输出问号的情况.其实就是当给的图不是连通图时输出问号.判断方法是:看形成的最小生成树的边数是不是等于节点数减一. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<map> #include<set> #include<vector> #i

hdu-1863畅通工程 最小生成树克鲁斯卡尔算法kruskal(并查集实现)

畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 16994    Accepted Submission(s): 7134 Problem Description 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出

HDU1863 畅通工程 【最小生成树Prim】

畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 16722    Accepted Submission(s): 6987 Problem Description 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出

HDU1863(Kruskal+并查集水题)

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

HDU1863 畅通工程---(最小生成树)

畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 27972    Accepted Submission(s): 12279 Problem Description 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出

hdu1863 畅通工程 基础最小生成树

1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #define N 110 5 #define M 5000 6 using namespace std; 7 8 int n, m, u[M], v[M], w[M], r[M], p[N]; 9 bool cmp(int i, int j){ return w[i]<w[j]; } 10 int f(int x){ return

hdu1863最小生成树krus模板

最小生成树的定义:权值和最小的连通路 krus: #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <stack> #include <string> #include <queue> #include <vector> #include <

hdu1863 畅通工程2 还是用并查集思想解决最小生成树问题

http://acm.hdu.edu.cn/showproblem.php?pid=1863 New~ 欢迎“热爱编程”的高考少年——报考杭州电子科技大学计算机学院关于2015年杭电ACM暑期集训队的选拔 畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 19994    Accepted Submission(s): 8528