[Ctsc2014]图的分割
阅读理解好题
翻译一下:
M(C)就是C这个诱导子图最小生成树最大边权
结论:
按照w进行sort,如果满足w<=
Ci,Cj表示u,v的连通块的诱导子图
并且Ci!=Cj那么进行连边
证明:
只需要证明两点:
1.某个边如果现在需要连边(不连就不满足半完美定义),那么以后也一定需要连边
也即,
不能<=w
Z是不单调的,但是一直是正整数,而之后再进行合并,w越来越大,M(Ci)一定会一直>=w
所以不会更小
2.某个边如果现在连上了边,那么以后也不可能可以断开。
本质和1一样的。。。
所以这个构造方法一定是正确的!
#include<bits/stdc++.h>
#define reg register int
#define il inline
#define fi first
#define se second
#define mk(a,b) make_pair(a,b)
#define numb (ch^'0')
#define pb push_back
#define solid const auto &
#define enter cout<<endl
#define pii pair<int,int>
using namespace std;
typedef long long ll;
template<class T>il void rd(T &x){
char ch;x=;bool fl=false;
while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
for(x=numb;isdigit(ch=getchar());x=x*+numb);
(fl==true)&&(x=-x);
}
template<class T>il void output(T x){if(x/)output(x/);putchar(x%+'');}
template<class T>il void ot(T x){if(x<) putchar('-'),x=-x;output(x);putchar(' ');}
template<class T>il void prt(T a[],int st,int nd){for(reg i=st;i<=nd;++i) ot(a[i]);putchar('\n');} namespace Miracle{
const int N=+;
const int M=+;
int n,m;
struct node{
int a,b,w;
bool friend operator <(node a,node b){
return a.w<b.w;
}
}e[M];
int fa[N],sz[N],mx[N];
int z[N];
int fin(int x){
return fa[x]==x?x:fa[x]=fin(fa[x]);
}
vector<int>mem[N];
int main(){
rd(n);rd(m);
for(reg i=;i<=n;++i) rd(z[i]);
for(reg i=;i<=m;++i){
rd(e[i].a);rd(e[i].b);rd(e[i].w);
}
sort(e+,e+m+);
for(reg i=;i<=n;++i){
fa[i]=i;sz[i]=;
}
for(reg i=;i<=m;++i){
int x=e[i].a,y=e[i].b;
int k1=fin(x),k2=fin(y);
if(k1!=k2){
if(e[i].w<=min(mx[k1]+z[sz[k1]],mx[k2]+z[sz[k2]])){
fa[k1]=k2;
sz[k2]+=sz[k1];
mx[k2]=e[i].w;
}
}
}
int cnt=;
for(reg i=;i<=n;++i){
int k=fin(i);
if(!mem[k].size()) ++cnt;
mem[k].push_back(i);
}
printf("%d\n",cnt);
for(reg i=;i<=n;++i){
if(mem[i].size()){
printf("%d ",mem[i].size());
for(reg j=;j<(int)mem[i].size();++j){
printf("%d ",mem[i][j]);
}
puts("");
}
}
return ;
} }
signed main(){
Miracle::main();
return ;
} /*
Author: *Miracle*
*/
[Ctsc2014]图的分割的更多相关文章
- BZOJ3559 : [Ctsc2014]图的分割
考试的时候看少了一行,导致暴力都写错额… 贾教说他出的这题水,但是我觉得并不水,那个结论还是很神的. 首先M(i)就是i的最小生成树的最大边, 设f[i]表示i属于哪个集合 我们把边按权值从小到大排序 ...
- bzoj 3559: [Ctsc2014]图的分割【最小生成树+并查集】
读题两小时系列-- 在读懂题意之后,发现M(c)就是c这块最大权割边也就是的最小生成树的最大权边的权值,所以整个问题都可以在MST的过程中解决(M和c都是跟着并查集变的) 不过不是真的最小生成树,是合 ...
- hdu 3435 图回路分割
将一个无向图分成许多回路,回路点交集为空,点幷集为V.幷最小化回路边权和. #include <cstdio> #include <cstring> #include < ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 基于谱聚类的三维网格分割算法(Spectral Clustering)
谱聚类(Spectral Clustering)是一种广泛使用的数据聚类算法,[Liu et al. 2004]基于谱聚类算法首次提出了一种三维网格分割方法.该方法首先构建一个相似矩阵用于记录网格上相 ...
- I-图的分割(二分+并查集)
图的分割 题目大意: 给你n个点,m条边的图,没有重环和自环,所有的点都联通 可以通过删除几条边使得整个图变成两个联通子图 求删除的边中最大边权的最小值 解题思路: 看到"最大边权的最小值& ...
- 【CSS进阶】试试酷炫的 3D 视角
写这篇文章的缘由是因为看到了这个页面: 戳我看看(移动端页面,使用模拟器观看) 运用 CSS3 完成的 3D 视角,虽然有一些晕3D,但是使人置身于其中的交互体验感觉非常棒,运用在移动端制作一些 H5 ...
- CSS3与页面布局学习总结(六)——CSS3新特性(阴影、动画、渐变、变形、伪元素等)
CSS3在CSS2.1的基础上新增加了许多属性,这里选择了较常用的一些功能与大家分享,帮助文档中有很详细的描述,可以在本文的示例中获得帮助文档. 一.阴影 1.1.文字阴影 text-shadow&l ...
- iOS10 推送必看(基础篇)
虽然这篇文章比较长,也不好理解,但是还是建议大家收藏,以后用到的时候,可以看看,有耐心的还是读一读. 这篇文章开始,我会跟大家好好讲讲,苹果新发布的iOS10的所有通知类. 一.创建本地通知事例详解: ...
随机推荐
- 重温Observer模式--热水器·改
引言 在 C#中的委托和事件 一文的后半部分,讲述了Observer(观察者)模式,并使用委托和事件实现了这个模式.实际上,不使用委托和事件,一样可以实现Observer模式.在本文中,我将使用GOF ...
- Balanced Binary Tree 判断平衡二叉树
Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary ...
- Linux 下的mysql+centos7+主从复制
mysql+centos7+主从复制 MYSQL(mariadb) MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可.开发这个分支的原因之一是:甲骨文公 ...
- 使用pstack和gdb调试死锁
1:代码 下面是一个简单的能够发生死锁的代码: #include <unistd.h> #include <pthread.h> #include <string.h&g ...
- css技巧——垂直居中
1.父元素确定的单行垂直居中 通过设置父元素的 height 和 line-height 高度一致来实现的. 2.父元素确定的多行垂直居中 父元素高度确定的多行文本.图片.块状元素的竖直居中的方法有两 ...
- POJ-3159_Candies
Candies Time Limit: 1500MS Memory Limit: 131072K Description During the kindergarten days, flymouse ...
- qt 自定义窗口显示鼠标划过的轨迹
鼠标事件分为四种: 1.按下 2.抬起 3.移动 4.双击 鼠标事件继承与QWidget void mouseDoubleClickEvent(QMouseEvent *event) void mou ...
- @uoj - 435@ 【集训队作业2018】Simple Tree
目录 @description@ @solution@ @accepted code@ @details@ @description@ 有一棵有根树,根为 1,点有点权. 现在有 m 次操作,操作有 ...
- 补充:css制作三角
梯形图案看下面这段样式: .test{width:10px; height:10px; border:10px solid; border-color:#ff3300 #0000ff #339966 ...
- laravel 中使用tinker 验证驱动加载是否成功
在验证laravel 中 InvalidArgumentException Driver [WeiBo] not supported. public function weibo() { retu ...