poj 2377

题意:

最大生成树

思路:

最大生成树

code:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
#include<string>
#include<queue>
#include<map>
#include<set>
#include<cmath>
using namespace std;

#define INF 0x3f3f3f3f
#define PI acos(-1.0)
#define eps 1e-4
#define maxd 10e4
#define mem(a, b) memset(a, b, sizeof(a))
typedef pair<int,int> pii;
typedef long long LL;
//------------------------------
const int maxn = 1005;
const int maxm = 20005;

struct Edge{
    int u,v,w;
    bool operator < (const Edge et) const{
        return w > et.w;
    }
}e[maxm];
int n,m;
void init(){
    int u,v,w;
    for(int i = 0; i < m; i++){
        scanf("%d%d%d",&u,&v,&w);
        e[i].u = u;
        e[i].v = v;
        e[i].w = w;
    }
}
int p[maxn];
int find(int x){
    if(x == p[x]) return p[x];
    else return p[x] = find(p[x]);
}
void solve(){
    sort(e, e+m);
    for(int i = 0; i <= n; i++) p[i] = i;
    int cnt = 1;
    LL ans = 0;
    for(int i = 0; i < m; i++){
        int pu = find(e[i].u);
        int pv = find(e[i].v);
        if(pu != pv){
            ans += e[i].w;
            p[pu] = pv;
            cnt++;
        }
        if(cnt == n){
            break;
        }
    }
    if(cnt < n) printf("-1\n");
    else cout << ans << endl;
}
int main(){
    scanf("%d%d",&n,&m);
    init();
    solve();
    return 0;
}

这道题没有题解一定是因为特太简单了T_T 我居然因为 ans += e[i].w 写错位置wa了一发   b l g l

时间: 2024-10-11 21:10:48

poj 2377的相关文章

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(最大生成树)

http://poj.org/problem?id=2377 题意:现在有一个人给人修建一些线路,(当然,我们想要少花钱消费,人家就想多多赚你的钱了,现在就给出这么一个问题).让你求修得所有电路能赚取的最大利润,若电路不能被全部修完,输出“-1”. 分析:最小生成树模板改一改就好啦~ #include <stdio.h> #include <algorithm> #include <string.h> using namespace std; #define maxn

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

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

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

Bad Cowtractors POJ - 2377

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 pa

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 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 2377 拉最长的线问题 kruskal算法

题意:建光纤的时候,拉一条最长的线 思路:最大生成树 将图的n个顶点看成n个孤立的连通分支,并将所有的边按权从大到小排 边权递减的顺序,如果加入边的两个端点不在同一个根节点的话加入,并且要将其连通,否则放弃 最后剩下一个连通支 解决问题的代码: #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<cmath> #include<

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&