POJ 1258-Agri-Net (Kruskal)

题目链接:Agri-Net

最小生成树水题,数组开的和题目描述一样,但是就是RE,有填了个0,还好这个题用 库鲁斯卡尔 敲了一遍,发现了点问题,以前写的库鲁卡尔模板有点问题,多写了步无用的操作,已修正。

题意:就是一个农夫想选镇长。。。。建一条路,使之能到达所有点,距离最短。

scanf输入

796K 32MS

cin输入

832K 125MS

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
const int N = 11000;
using namespace std;
int n,ans,l;
struct node{
    int u,v,w;
}edge[10000];
int father[N];
int cmp(const void *a,const void *b)
{
    node *X = (struct node *)a;
    node *Y = (struct node *)b;
    return X->w - Y->w;
}
int find(int x)
{
    return (father[x]==x)?(x):find(father[x]);
}

void Kruskal()
{
    ans = 0;
    int uu,vv;
     for(int i = 0;i<n;i++)
        father[i] = i;
    for(int i = 0;i<l;i++)
    {
         uu = find(edge[i].u);
         vv = find(edge[i].v);
         if(uu!=vv)
         {
             father[uu] = vv;
             ans += edge[i].w;
         }
    }
    cout<<ans<<endl;
}
int main()
{
    int a;
    while(cin>>n)
    {
        l = 0;
        for(int i = 0;i<n;i++)
        {
            for(int j = 0;j<n;j++)
            {
                cin>>a;
                edge[l].u = i; edge[l].v = j; edge[l].w = a;
                l++;
            }
        }
        qsort(edge,l,sizeof(edge[0]),cmp);
        Kruskal();
    }
    return 0;
}
832K 125MS

POJ 1258-Agri-Net (Kruskal),布布扣,bubuko.com

时间: 2025-01-03 22:39:39

POJ 1258-Agri-Net (Kruskal)的相关文章

POJ 1258 Agri-Net (Prim&amp;Kruskal)

题意:FJ想连接光纤在各个农场以便网络普及,现给出一些连接关系(给出邻接矩阵),从中选出部分边,使得整个图连通.求边的最小总花费. 思路:裸的最小生成树,本题为稠密图,Prim算法求最小生成树更优,复杂度O(n^2) prim: #include <cstdio> #include <iostream> #include <algorithm> #include <cstring> using namespace std; int mat[110][110]

POJ 1258【最小生成树 &amp;&amp; Kruskal &amp;&amp; 水题】

Agri-Net Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 45145   Accepted: 18534 Description Farmer John has been elected mayor of his town! One of his campaign promises was to bring internet connectivity to all farms in the area. He nee

poj 1258

题意:给n*n矩阵 表示个点个边  求最小生成树 思路:Kruskal 算法 //:简单介绍一下题意.农民要建立互联网络,目的使村庄里所有的农民连上网, //并且总费用最小.多组数据,每组数据给出一个n,然后给出n * n大小的无向图的邻接矩阵表示,值表示边权. //要求输出最小生成树的权值和. #include<iostream> #include<cstring> using namespace std; int map[101][101]; int dist[101]; in

POJ 1258 Agri-Net (最小生成树+Prim)

Agri-Net Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 39820   Accepted: 16192 Description Farmer John has been elected mayor of his town! One of his campaign promises was to bring internet connectivity to all farms in the area. He nee

【POJ 1258】 Agri-Net

[POJ 1258] Agri-Net 最小生成树模板 Prim #include #define INF 0x3f3f3f3f using namespace std; int mp[501][501]; int dis[501]; bool vis[501]; int n; int Prim() { int i,j,w,p,sum = 0; memset(dis,-1,sizeof(dis)); memset(vis,0,sizeof(vis)); dis[1] = 0; for(i = 0

POJ 1258 Agri-Net(Prim算法)

题意:n个农场,求把所有农场连接起来所需要最短的距离. 思路:prim算法 课本代码: //prim算法 #include<iostream> #include<stdio.h> #include<cstring> using namespace std; int n; int tot; int v[150][150]; int dist[150];//存 节点到树 的最小距离 bool use[150];//标记节点是否存在 int main(){ while(sca

各种最小生成树。 HDU 1863 HDU 1301 POJ 1258

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

poj 1258 Agri-Net 解题报告

题目链接:http://poj.org/problem?id=1258 题目意思:给出 n 个 farm,每个farm 之间通过一定数量的fiber 相连,问使得所有farm 直接或间接连通的 最少 fiber 数是多少. 赤裸裸的最小生成树,用prim做的. 有个地方写错,wa 了 几次. 1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 5 const int farm_num = 10000

rwkj 1505 poj 1258 10.1.5.253 1505

#include <iostream>// poj 1258 10.1.5.253 1505using namespace std; #define N 105 // 顶点的最大个数 (多写 int a[N][N],low[N],n,ans;int min(int x,int y){ return x<y?x:y; } void prim(int u0) { int i,j,m,k; ans=0; // for (i=1;i<n;i++) low[i]=a[u0][i]; // l

poj 1258 kruscal

//hnldyhy(303882171) 8:54:04 #include <iostream> // poj 1258#include <algorithm> using namespace std; #define N 105int p[N];void init (int n){ for (int i=1;i<=n;i++) p[i]=i; }int find(int x){ if (p[x]==x)return x; else return p[x]=find(p[x]