CF Grakn Forces 2020 1408E Avoid Rainbow Cycles(最小生成树)
1408E Avoid Rainbow Cycles
概述
非常有趣的题目(指解法,不难,但很难想)
非常崇拜300iq,今天想做一套div1时看见了他出的这套题Grakn Forces 2020,就立马开始补这套题,果然不出我所料,全是iq题(误
题目
m个set中有1-n的一些数,首先我们可以把一个数 j 从set i 中删除,代价是 \(a[i]+b[j]\) ,至于为什么要删除之后再说
接着我们对于每个set i,\(\forall x,y \in i\),建边\((x,y)\)并染色为 \(i\) 。
最后我们定义\(Rainbow Cycle\)为从某个节点x 出发,经过一个回路能够重新回到x 且,回路中的边颜色两两各不相同
问题是求出最小的删除费用使得图中没有\(RainbowCycle\)
题解
核心:建图跑最小生成树
建图方式:数 \(j\) 在set \(i\) 里就建一条边\((n+i,j)\) ,这样实际上每个\(x,y\)在set里的都已经联通了,\(RainbowCycle\) 其实就变成了新图里的一条普通回路
问题就很明显了,一个没有环的图且删边费用最小就是最大生成树
总结
给\((x,y)\)边染色为\(z\),可以增加一个新节点\(n+z(防止点重复)\) ,建两条边\((x,n+z),(n+z,y)\) 这样方便对边进行操作
代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=2e5+10;
int pre[N],tot=0;
ll a[N],b[N];
struct E
{
int x,y;
ll val;
E(int x1,int y1,ll val1){
x=x1;y=y1;val=val1;
};
E(){
x=y=val=0;
};
}edge[2*N];
bool cmp(E x,E y)
{
return x.val>y.val;
}
int find(int x)
{
if(pre[x]==x) return x;
else return pre[x]=find(pre[x]);
}
int merge(int x,int y)
{
int fx=find(x),fy=find(y);
if(fx==fy) return 0;
pre[fx]=fy;
return 1;
}
int main()
{
int n,m;
scanf("%d%d",&m,&n);
for(int i=1;i<=m;i++) scanf("%lld",&a[i]);
for(int j=1;j<=n;j++) scanf("%lld",&b[m+j]);
for(int i=1;i<=m+n;i++) pre[i]=i;
for(int i=1;i<=m;i++){
int x;scanf("%d",&x);
for(int j=1;j<=x;j++){
int y;scanf("%d",&y);
E cnt(i,m+y,a[i]+b[m+y]);
edge[++tot]=cnt;
}
}
sort(edge+1,edge+tot+1,cmp);
ll res=0;
for(int i=1;i<=tot;i++){
E cnt=edge[i];
int x=cnt.x,y=cnt.y;
if(merge(x,y)){
continue;
}
else{
res+=cnt.val;
//cout<<x<<' '<<y<<' '<<cnt.val<<endl;
}
}
printf("%lld\n",res);
}
CF Grakn Forces 2020 1408E Avoid Rainbow Cycles(最小生成树)的更多相关文章
- Grakn Forces 2020 ABCDE题解
看到老外评论区中说,这场的难度估计是\(div.1\)和\(div.1.5\)的合并 A. Circle Coloring #构造 题目链接 题意 给定三个长度为\(n\)数组\(a,b,c\),要你 ...
- Grakn Forces 2020
比赛链接:https://codeforces.com/contest/1408 A. Circle Coloring 题意 给出三个长为 $n$ 的序列 $a,b,c$,对于每个 $i$,$a_i ...
- Effective Objective-C [上]
网上看到的 http://esoftmobile.com/2013/08/10/effective-objective-c/ 本文是针对<Effective Objective-C>一书的 ...
- ios中strong和weak的解释理解
来自stackoverflow解释的挺有意思的 Imagine our object is a dog, and that the dog wants to run away (be dealloca ...
- A million requests per second with Python
https://medium.freecodecamp.com/million-requests-per-second-with-Python-95c137af319 Is it possible t ...
- Linux内存管理 (15)页面迁移
专题:Linux内存管理专题 关键词:RMAP.页面迁移. 相关章节:反向映射RMAP.内存规整. 页面迁移的初衷是为NUMA系统提供一种将进程迁移到任意内存节点的能力,后来内存规整和内存热插拔场景都 ...
- Effective Objective-C [下]
http://esoftmobile.com/2013/08/17/effective-objective-c-2/ Chapter 6: Blocks and Grand Central Dispa ...
- Objective-C Properties
Objective-C Properties Apple introduced properties, a combination of new compiler directivesand a ne ...
- apache ignite系列(八):问题汇总
1,java.lang.ClassNotFoundException Unknown pair 1.Please try to turn on isStoreKeepBinary in cache s ...
随机推荐
- 第10.6节 Python包的概念
一. 引言 在<第10.2节 Python的模块及模块导入>介绍了模块的概念及导入的几个关键点,Python中的模块是一个单个的py文件,当我们开发的项目或功能集由多个文件构成时,我们需要 ...
- TMOOC-1709-小明复仇
题目描述 小明所在的世界上一共有n个城市,城市间有m条双向道路.小明现在在城市1,他想到位于城市n的小韩隆家询问他为什么没有将自己的五三复原完成.由于小韩隆手下有许多小弟,小明担心自己可能再也回不来, ...
- 题解-CF1239D Catowice City
CF1239D Catowice City 有 \(n\) 个人和 \(n\) 只猫.有 \(m\) 对人猫友谊,即第 \(u_i\) 个人认识第 \(v_i\) 只猫,保证第 \(i\) 个人和第 ...
- nginx根据http请求,将JSON的请求转发到后端,将非JSON请求,转发到前端
nginx.conf worker_processes 1; events { worker_connections 1024; } http { include mime.types; defaul ...
- uniapp中使用picker中的注意事项
APP端中picker点击后不弹出: 1.请确保picker标签里面嵌套了一个view,并且view里面有值 2.请确保picker中的默认值的格式跟该picker类型的值对应 例如下面: <v ...
- 新手关于C++ cin 的返回值
cin是C++的标准输入流,其本身是一个对象,并不存在返回值的概念. 不过经常会有类似于 while(cin>>a) 的调用,这里并不是cin的返回值,应该关注">> ...
- redis 常用基本命令
redis 常用基本命令 redis-cli 启动set 键 值 # 存储 单条数据 # set 'zsj' 'bab' get 键 # 通过键获取值 # get ...
- MySQL 5.7.29安装配置
一.环境准备(关闭防火墙) 1.清除已安装数据库 [root@mysql01 ~]# rpm -qa | grep mariadb mariadb-libs-5.5.35-3.el7.x86_64 [ ...
- collectd+infludb+grafana实现tomcat JVM监控
前提条件:已安装好java环境,tomcat,influxdb和collectd.本文暂不提供以上内容的安装步骤 系统环境:centos7 原理:开启tomcat的jmx端口,使用collectd的c ...
- Linux shell 获取目录下时间最新的文件的文件名
ls -lt /dirname/ | grep filename | head -n 1 |awk '{print $9}' 逐条解释: ls -lt /dirname/ 列出此目录下的所有文件并按照 ...