考试的时候看少了一行,导致暴力都写错额…

贾教说他出的这题水,但是我觉得并不水,那个结论还是很神的。

首先M(i)就是i的最小生成树的最大边,

设f[i]表示i属于哪个集合

我们把边按权值从小到大排序,对于一条边(u,v),权值为w,

如果w<=min(M(f[u])+Z[C[f[u]]],M(f[v])+Z[C[f[v]]]),

那么u,v就不能分开,否则不满足“半完美”这个条件,那就把它们放入一个集合。

搞完之后扫一遍输出每个集合即可。

至于怎么证明正确性,我也不知道。

#include<cstdio>
#include<algorithm>
#define N 100010
using namespace std;
inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
struct pp{int u,v,w;}a[500010];
inline bool cmp(pp a,pp b){return a.w<b.w;}
int n,m,i,j,z[N],M[N],c[N],f[N],ed,g[N],nxt[N<<1],v[N<<1],k,cnt[N];
inline void add(int x,int y){v[++ed]=y;nxt[ed]=g[x];g[x]=ed;}
void go(int x,int pre,int y){f[x]=y;for(int i=g[x];i;i=nxt[i])if(v[i]!=pre)go(v[i],x,y);
}
inline void link(int x,int y,int z){if(f[x]==f[y])return;if(c[f[x]]>c[f[y]])swap(x,y);c[f[y]]+=c[f[x]];M[f[y]]=z;go(x,0,f[y]);add(x,y);add(y,x);
}
int main(){read(n);read(m);for(i=1;i<=n;i++)read(z[i]);for(i=1;i<=m;i++)read(a[i].u),read(a[i].v),read(a[i].w);sort(a+1,a+m+1,cmp);for(i=1;i<=n;i++)f[i]=i,c[i]=1;for(i=1;i<=m;i++)if(a[i].w<=min(M[f[a[i].u]]+z[c[f[a[i].u]]],M[f[a[i].v]]+z[c[f[a[i].v]]]))link(a[i].u,a[i].v,a[i].w);for(i=1;i<=n;i++)g[i]=0;ed=0;for(i=1;i<=n;i++){if(!cnt[f[i]])k++;cnt[f[i]]++;add(f[i],i);}for(printf("%d\n",k),i=1;i<=n;i++)if(cnt[i]){for(printf("%d",cnt[i]),j=g[i];j;j=nxt[j])printf(" %d",v[j]);puts("");}return 0;
}

  

BZOJ3559 : [Ctsc2014]图的分割相关推荐

  1. 一键在Web端把CAD图自动分割成多张图纸并导出子图或图片

    前言 ​ 在实际中,一个CAD文件中往往存放多张图纸,有时需要这些图纸分开,单独保存或显示.以往的做法是在cad中人工进行处理.今天小编教您在web端一键把CAD图自动分割成多张图纸并能把每个子图导出 ...

  2. 使用Echars实现水滴状、环形图、分割图、堆叠、组织架构图、地图轮廓等图表

    百度Echarts 水滴状图表 横向柱形图 分割块柱形图 曲线面积图 横向堆叠柱形图 环形进度图 饼状图 饼状图多个标题 组织架构图 省市轮廓地图 新疆省地图 全国地图 折线图阴影效果 柱形折线混合图 ...

  3. 使用K-Means算法对微信背景图进行分割

    K-Means 是一种非监督学习,解决的是聚类问题.K 代表的是 K 类,Means 代表的是中心,你可以理解这个算法的本质是确定 K 类的中心点,当你找到了这些中心点,也就完成了聚类. (一)工作原 ...

  4. 合图分割工具SpriteSplit

    近期,各位游戏开发者一直在头疼没有分割表的合图怎么拆开,如TexturePacker打包的合图,分割表文件丢失了怎么搞? Unity弄出来的合图没有分割表文件怎么拆开? 为了满足广大开发者的需求,对于 ...

  5. 基于FCN,U-Net的深度学习医学影像分割算法(细胞分割算法)以及传统算法分析

    本博文主要分析了基于传统计算机视觉的细胞分割算法和基于深度学习的细胞分割算法.主要针对医学影像分割算法.包括了FCN全卷积网络的细胞分割效果,U-Net细胞分割效果.查阅了采用深度学习分割医学影像的几 ...

  6. AAAI 2020论文解读:商汤科技发布新视频语义分割和光流联合学习算法

    来源 | Every Frame Counts: Joint Learning of Video Segmentation and Optical Flow 编辑 | Carol 出品 | AI科技大 ...

  7. Google图嵌入工业界最新大招,高效解决训练大规模深度图卷积神经网络问题

    导读:本文主要介绍Google发表在KDD 2019的图嵌入工业界最新论文,提出Cluster-GCN,高效解决工业界训练大规模深度图卷积神经网络问题,性能大幅提升基础上依靠可训练更深层网络达到SOT ...

  8. 动手实践系列:CV语义分割!

    Datawhale干货 作者:游璐颖,福州大学,Datawhale成员 图像分割是计算机视觉中除了分类和检测外的另一项基本任务,它意味着要将图片根据内容分割成不同的块.相比图像分类和检测,分割是一项更 ...

  9. 视频也能P!谷歌CVPR 2021最新视频P图模型omnimatte

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 来源:Google AI .新智元 [导读]你是否还在受视频P图不能 ...

最新文章

  1. 如何通俗地讲解对偶问题?尤其是拉格朗日对偶lagrangian duality?
  2. 使用JMX监控Kafka
  3. 【计算理论】不可判定性 ( 停机问题 | 图灵机语言是否空集问题 | 图灵机是否等价问题 | 是否存在自动机接受图灵机语言问题 | 莱斯定理 Rice‘s Theorem )
  4. 关于 java.util.concurrent 您不知道的 5 件事--转
  5. 机器学习理论《统计学习方法》学习笔记:奇异值分解(SVD)
  6. Windows常用命令集
  7. 对于一个大一计科新生,有什么代码行数在500~1000的程序(C语言)可以试着写来练手?
  8. 回溯法 —— 算法框架及应用
  9. 将应用程序11M内存占用,降至500K左右
  10. Axure元件库web组件库典藏版 (含五大类159小类组件 )
  11. 演化博弈论简介(转)
  12. 数学建模——层次分析法(Matlab)【评价类问题】
  13. 篆刻学简体——第一章
  14. DGIOT 工业物联网开源平台简介
  15. 小米蓝牙广播数据解析(MiBeacon)
  16. matlab清除历史数据,以前在MATLAB中打开过的m文件的历史记录
  17. Win10 修复引导
  18. 数据分析入门书籍整理
  19. 【Android】Vibrator的使用
  20. 【大汇总】HTML属性及含义

热门文章

  1. Jquery属性选择器(同时匹配多个条件,与或非)(附样例)
  2. 如何衡量系统内存健康程度: memdelay简介
  3. Dubbo中基于权重的随机算法
  4. 1-4月份我国软件业务收入15753亿元 同比增长13.1%
  5. TOJ 3750: 二分查找
  6. GUN sed高级用法,sed脚本编写
  7. 使用 xcode 8 构建版本 iTunes Connect 获取不到应用程序的状态的解决办法
  8. 从团购网的漏洞看网站安全性问题 -- 安全 -- IT技术博客大学习 -- 共学习 共进步!...
  9. nbalive05 editor 正式版
  10. Java服务端人脸识别实战开发优化