POJ 2377 Bad Cowtractors【最大生成树,Prime算法】

Bad Cowtractors

Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 13628   Accepted: 5632

Description

Bessie has been hired to build a cheap internet network among Farmer John‘s N (2 <= N <= 1,000) barns that are conveniently numbered 1..N. FJ has already done some surveying, and found M (1 <= M <= 20,000) possible connection routes between pairs of barns.
Each possible connection route has an associated cost C (1 <= C <= 100,000). Farmer John wants to spend the least amount on connecting the network; he doesn‘t even want to pay Bessie.

Realizing Farmer John will not pay her, Bessie decides to do the worst job possible. She must decide on a set of connections to install so that (i) the total cost of these connections is as large as possible, (ii) all the barns are connected together (so that
it is possible to reach any barn from any other barn via a path of installed connections), and (iii) so that there are no cycles among the connections (which Farmer John would easily be able to detect). Conditions (ii) and (iii) ensure that the final set of
connections will look like a "tree".

Input

* Line 1: Two space-separated integers: N and M

* Lines 2..M+1: Each line contains three space-separated integers A, B, and C that describe a connection route between barns A and B of cost C.

Output

* Line 1: A single integer, containing the price of the most expensive tree connecting all the barns. If it is not possible to connect all the barns, output -1.

Sample Input

5 8
1 2 3
1 3 7
2 3 10
2 4 4
2 5 8
3 4 6
3 5 2
4 5 17

Sample Output

42

Hint

OUTPUT DETAILS:

The most expensive tree has cost 17 + 8 + 10 + 7 = 42. It uses the following connections: 4 to 5, 2 to 5, 2 to 3, and 1 to 3.

Source

USACO 2004 December Silver

原题链接:http://poj.org/problem?id=2377

求最大生成树,改一下就可以了。。。

AC代码:

#include <iostream>
#include <cstdio>
using namespace std;
const int INF=0x3f3f3f3f;
int a[1005][1005];
int dis[1005];
bool vis[1005];
int n,m;
void Prime()
{
    for(int i=1;i<=n;i++)
    {
        vis[i]=false;
        dis[i]=a[1][i];
    }
    dis[1]=0;
    vis[1]=true;
    int ans=0;
    for(int i=2;i<=n;i++)
    {
        int minn=0;
        int p=-1;
        for(int j=1;j<=n;j++)
        {
            if(!vis[j]&&dis[j]>minn)//
                minn=dis[p=j];
        }
        if(p==-1)
        {
            cout<<"-1"<<endl;
            return;
        }
        vis[p]=true;
        ans+=minn;
        for(int j=1;j<=n;j++)
        {
            if(!vis[j]&&dis[j]<a[p][j])//
                dis[j]=a[p][j];
        }
    }
    cout<<ans<<endl;
}
int main()
{
    //freopen("data/2377.txt","r",stdin);
    while(cin>>n>>m)
    {
        //初始化
        for(int i=1; i<=n; i++)
        {
            for(int j=1; j<=n; j++)
                a[i][j]=0;
        }
        int x,y,z;
        while(m--)
        {
            scanf("%d%d%d",&x,&y,&z);
            if(z>a[x][y])
                a[x][y]=a[y][x]=z;
        }
        Prime();
    }
    return 0;
}
时间: 2024-11-16 07:29:25

POJ 2377 Bad Cowtractors【最大生成树,Prime算法】的相关文章

poj - 2377 Bad Cowtractors(最大生成树)

http://poj.org/problem?id=2377 bessie要为FJ的N个农场联网,给出M条联通的线路,每条线路需要花费C,因为意识到FJ不想付钱,所以bsssie想把工作做的很糟糕,她想要花费越多越好,并且任意两个农场都需要连通,并且不能存在环.后面两个条件保证最后的连通图是一棵树. 输出最小花费,如果没办法连通所有节点输出-1. 最大生成树问题,按边的权值从大道小排序即可,kruskal算法可以处理重边的情况,但是在处理的时候,不能仅仅因为两个节点在同一个连通子图就判断图不合法

poj 2377 Bad Cowtractors

Bad Cowtractors Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10194   Accepted: 4333 Description Bessie has been hired to build a cheap internet network among Farmer John's N (2 <= N <= 1,000) barns that are conveniently numbered 1..N

poj 2377 Bad Cowtractors(最大生成树!)

Description Bessie has been hired to build a cheap internet network among Farmer John's N (2 <= N <= 1,000) barns that are conveniently numbered 1..N. FJ has already done some surveying, and found M (1 <= M <= 20,000) possible connection route

POJ 1258 Agri-Net 【MST,Prime算法】

Agri-Net Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 52097   Accepted: 21722 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 2377 Bad Cowtractors (Kruskal)

题意:给出一个图,求出其中的最大生成树= =如果无法产生树,输出-1. 思路:将边权降序再Kruskal,再检查一下是否只有一棵树即可,即根节点只有一个 #include <cstdio> #include <iostream> #include <algorithm> #include <cstring> using namespace std; int N, M; // 节点,边的数量 struct edge { int from, to, dist;

poj 1258 Agri-Net【最小生成树(prime算法)】

Agri-Net Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 44827   Accepted: 18351 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 - 2377 - Bad Cowtractors (最小生成树)

题目链接:https://vjudge.net/problem/POJ-2377#author=tsacm123 题目大意:就是让你算出n个谷仓之间的最大生成树,然后把各条边的值累加起来 #include<set> #include<map> #include<stack> #include<queue> #include<cmath> #include<cstdio> #include<cctype> #include&

poj 3625 Building Roads 最小生成树(prime或kruskal+并查集)(算法归纳)

Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Description Farmer John had just acquired several new farms! He wants to connect the farms with roads so that he can travel from any farm to any other farm via a sequence of roads;

POJ 2560 Freckles Prime算法题解

本题是求最小生成树. 给出的是坐标节点,然后需要根据这些坐标计算出各个点之间的距离. 除此就是标准的Prime算法了,能使用Prime的基本上都可以使用Kruskal. 这些经典的算法一定要多写,熟练掌握,否则很难灵活运用的. 而且经典的算法之所以为经典,原因之一是没那么容易自己凭空想象出来的,所以要熟练. #include <stdio.h> #include <string.h> #include <queue> #include <float.h> #