【hdu3367】Pseudoforest(伪森林)
http://acm.hdu.edu.cn/showproblem.php?pid=3367
题目大意
伪森林就是一个无向图,这个无向图有多个连通块且每个连通块只有一个简单环。
给你一个无向图,让你找这个图的一个最大生成伪森林(即边权之和最大)。
题解
考虑到用Kruscal算法搞最大生成树时,每次加入一条边之前都必须保证边的这两点在之前属于两个连通块,就是为了防止出现环。
即如果加入的边的两点在一个没有环的连通块里的话,就会出现一个环。
那么我们把Kruscal算法改造一下,如果这条边的两点在同一个没有环的连通块的话,仍然加入这条边,并把这个连通块标记有环。把所有的边都试着加入一遍后就可以得到最终答案。
还要注意如果这条边的两点在不同的连通块,但是两个连通块都有环,那么这条边也不能加。
#include <iostream>
#include <vector>
#include <algorithm>
#define maxn 10005
using namespace std;
int n, m;
namespace djs
{
int parent[maxn];
bool mark[maxn];
void init()
{
for (int i = ; i <= n; i++)
{
parent[i] = -;
mark[i] = false;
}
}
int find(int x)
{
if (parent[x] < )
return x;
else
return parent[x] = find(parent[x]);
}
bool merge(int x, int y)
{
x = find(x);
y = find(y);
if (x != y) // x与y不在一个连通块
{
if (mark[x] && mark[y]) // 两个连通块都有环
return false;
else
{
if (parent[x] > parent[y])
swap(x, y);
parent[x] += parent[y];
parent[y] = x;
mark[x] |= mark[y];
return true;
}
}
else // x与y在一个连通块
{
if(mark[x])
return false;
else // 这个连通块没有环,可以加这条边
{
mark[x] = true;
return true;
}
}
}
}
struct edge
{
int from, to, weight;
};
inline bool cmper(const edge &x, const edge &y) { return x.weight > y.weight; }
vector<edge> edges;
int main()
{
while (true)
{
cin >> n >> m;
if (n == && m == )
return ;
djs::init();
edges.clear();
int a, b, c;
for (int i = ; i <= m; i++)
{
cin >> a >> b >> c;
edges.push_back((edge){a, b, c});
}
sort(edges.begin(), edges.end(), cmper); int ans = ;
for (int i = ; i < edges.size(); i++)
{
if (djs::merge(edges[i].from, edges[i].to))
ans += edges[i].weight;
}
cout << ans << endl;
}
return ;
}
【hdu3367】Pseudoforest(伪森林)的更多相关文章
- hdu3367最大伪森林(并查集)
题目链接:http://icpc.njust.edu.cn/Problem/Hdu/3367/ 题目要求一个连通图的最大伪森林,伪森林是一个最多有一个回路的图.我们只要用Kruskal最大生成树的策略 ...
- HDU 3367 (伪森林,克鲁斯卡尔)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=3367 Pseudoforest Time Limit: 10000/5000 MS (Java/Oth ...
- Pseudoforest(伪最大生成树)
Pseudoforest Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total ...
- HDU3367 Pseudoforest 【并查集】+【贪心】
Pseudoforest Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) To ...
- hdoj--3367--Pseudoforest(伪森林&&最大生成树)
Pseudoforest Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) To ...
- hdu 3367(Pseudoforest ) (最大生成树)
Pseudoforest Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tot ...
- hdu 3367 Pseudoforest (最小生成树)
Pseudoforest Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tot ...
- hdu 3367 Pseudoforest(并查集)
题意:有一种叫作Pseudoforest的结构,表示在无向图上,每一个块中选取至多包含一个环的边的集合,又称“伪森林”.问这个集合中的所有边权之和最大是多少? 分析:如果没有环,那么构造的就是最大生成 ...
- [HDOJ3367]Pseudoforest(并查集,贪心)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3367 求一个无向图上权值最大的伪森林. 伪森林:一个图的连通子图,当且仅当这个子图有且仅有一个环. 既 ...
随机推荐
- Java求555 555的约数中最大的三位数。
package org.llh.test; /** * 求555 555的约数中最大的三位数 * @author llh * */ public class Car { //整数j除以整数i(i≠0) ...
- HDU 2665 Kth number(划分树)
Kth number Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- Problem N
Problem Description The cows have purchased a yogurt factory that makes world-famous Yucky Yogurt. O ...
- Count the Colors
Count the Colors Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu Subm ...
- 磁盘管理 之 parted命令添加swap,文件系统
第1章 磁盘管理 1.1 必须要了解的. 1.1.1 ps aux 命令中 RSS 与VSZ的含义 rss 进程占用的物理内存的大小 单位:kb : vsz 进程占用的虚拟的内存大小(物理内存+swa ...
- html-webpack-plugin的使用
使用前第一步:npm install 安装html-webpack-plugin --save--dev || --save (tips:--save--dev跟--save最大的区别就是--dev ...
- Node.js 回调函数
Node.js 回调函数 Node.js 异步编程的直接体现就是回调. 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了. 回调函数在完成任务后就会被调用,Node 使用了大量的回调函数, ...
- Photoshop颜色出现比较大的偏差,偏色严重,显示器配置文件2351似乎有问题
其实出现这个问题是因为 显示器的配置问题.并不是PS版本或者电脑系统问题. 一般在你首次启动PS的时候会出现提示:显示器配置文件2351似乎有问题. 如果你点击了继续运行那以后你使用PS打开任何文件都 ...
- JavaWeb框架SSH_Struts2_(一)
1. Struts2 框架入门及结合Intellj idea完成登陆demo测试 1.1 本章目录: 框架入门 Struts2简介 Struts2入门案例 Struts2执行流程分析 2. 具体 ...
- django之第二天
今天学习目标: 一,路由系统 1,默认处理函数 2,动态URL 3,分级匹配 4,反射实现动态路由 二.中间件 三.Model(重点) 1,创建表 2,操作表数据 四.Form (重点) 1,用户提交 ...