HDU 5253 Prim算法

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

Prim算法是

1.每次选出 (已经选出的)点集 能够连接 边权值最小的点

2.使用新找出的点能带来的新的更小的边权,来更新旧的较大的边权

3.重复,直到连接所有点

的贪心算法

使用优先权队列优化 查找 边权值最小的点 的步骤。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
typedef long long LL;
typedef pair<int,int> P;
int cnt;
int t,n,m;
int mp[1005][1005];
bool vis[1005][1005];
int dirx[] = {0,1,0,-1};
int diry[] = {1,0,-1,0};

LL bfs()
{
    priority_queue<P, vector<P>, greater<P> > pq;
    while(!pq.empty()) pq.pop();
    memset(vis, 0, sizeof(vis));
    pq.push(P(0, 0));
    LL cost = 0;
    int cnt = 0;
    while(!pq.empty())
    {
        P p = pq.top();
        pq.pop();
        int val = p.first, id = p.second;
        int x = id/m, y = id%m;
        if(vis[x][y]) continue;
        vis[x][y] = 1;
        cost += val;
        for(int i = 0; i < 4; i++)
        {
            int nx = x + dirx[i], ny = y + diry[i];
            if(nx < 0 || ny < 0 || nx >= n || ny >= m || vis[nx][ny]) continue;
            int nval = abs(mp[x][y] - mp[nx][ny]), nid = nx*m+ny;
            pq.push(P(nval, nid));
        }
        cnt++;
        if(cnt >= m*n) break;
    }
    return cost;
}

int main()
{
    scanf("%d", &t);
    while(t--)
    {
        scanf("%d%d", &n,&m);
        for(int i = 0; i < n; i++)
        {
            for(int j = 0; j < m; j++)
            {
                scanf("%d", &mp[i][j]);
            }
        }
        static int kase = 0;
        printf("Case #%d:\n%lld\n", ++kase, bfs());
    }
    return 0;
}
时间: 2024-08-01 06:22:16

HDU 5253 Prim算法的相关文章

hdu 1863 prim算法的使用

http://acm.hdu.edu.cn/showproblem.php?pid=1863 畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 15980    Accepted Submission(s): 6627 Problem Description 省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一

hdu 3371 最小生成树prim算法

Connect the Cities Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 8992    Accepted Submission(s): 2519 Problem Description In 2100, since the sea level rise, most of the cities disappear. Thoug

hdu 1102 Constructing Roads (Prim算法)

题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1102 Constructing Roads Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 21947    Accepted Submission(s): 8448 Problem Description There are N villa

hdu 1162 Eddy&amp;#39;s picture (Kruskal算法,prim算法,最小生成树)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1162 [题目大意] 给你n个点的坐标,让你找到联通n个点的一种方法.保证联通的线路最短,典型的最小生成树问题. 方法一 . 通过不断找到最小的边来找到终于结果. Kruskal 算法 #include <iostream> #include <algorithm> #include <cstdio> #include <cmath> using namespac

hdu 3371(prim算法)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3371 Connect the Cities Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 10313    Accepted Submission(s): 2937 Problem Description In 2100, since th

hdu 1162 Eddy&#39;s picture (Kruskal算法,prim算法,最小生成树)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1162 [题目大意] 给你n个点的坐标,让你找到联通n个点的一种方法,保证联通的线路最短,典型的最小生成树问题. 方法一 , 通过不断找到最小的边来找到最终结果. Kruskal 算法 #include <iostream> #include <algorithm> #include <cstdio> #include <cmath> using namespac

HDU1102 最小生成树prim算法

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1102 题意:给出任意两个城市之间建一条路的时间,给出哪些城市之间已经建好,问最少还要多少时间使所有的城市连通? 思路:已经建好的城市之间需要的时间设为0,就是求最小生成树的权值和了. 顺便复习一下prim算法. 知道思想就可以实现,才是合格的搬砖工,希望以后脱离模板. 附代码: /* prim 最小生成树算法 过程:prim算法将图分为两部分,假设原顶点集为V,将其分为S和V-S两部分,S为已经确定

最小生成树问题(prim算法)POJ-1258 Agri-Net

/* 这个题很水,但是,莫名其妙runtime error一晚上,重写了一遍就又没了,很伤心! 题意很简单,大致为n个村庄,连光缆,要求连上所有村庄的长度最短. 输入n,接着是n*n的矩阵,直接用prim算法写就行: */ #include<iostream> #include<cstdlib> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath>

杭电1162--Eddy&#39;s picture(Prim()算法)

Eddy's picture Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 8070    Accepted Submission(s): 4084 Problem Description Eddy begins to like painting pictures recently ,he is sure of himself to b