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 ...
随机推荐
- PyQt(Python+Qt)学习随笔:QTabWidget部件信号简介
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QTabWidget自身提供的信号包括如下: currentChanged(int index):每 ...
- PyQt(Python+Qt)学习随笔:树型部件QTreeWidget中的项编辑方法editTriggers、editItem和openPersistentEditor作用及对比分析
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在树型部件QTreeWidget中,有三种方法触发进行项数据的编辑:editTriggers触发编辑 ...
- Python基础篇学习感悟:学如不及,犹恐失之
从2019年3月底开始学习Python,4月12日在CSDN发表第一篇博文,时至今日已有4个月零12天. 4个多月的学习,老猿从一个Python小白成长到今天,可以说对Python这门语言已经略知一二 ...
- PyQt(Python+Qt)学习随笔:Qt Designer中spacer部件的sizeHint属性
在两种Spacer部件中都有sizeHint属性,在<PyQt(Python+Qt)学习随笔:Qt Designer中部件的三个属性sizeHint缺省尺寸.minimumSizeHint建议最 ...
- Android基础02
初识安卓的另一个重要的组件---广播. 1.广播的分类 标准广播:是一种完全异步执行的广播,在广播发出之后,所有的广播 接收器几乎都会在同一时刻接收到这条广播消息,因此它们之间没有任何先后顺序可言.这 ...
- Django链接mysql数据库报错1064
D:\PycharmProjects\autotest>python manage.py makemigrations django.db.utils.ProgrammingError: (10 ...
- Go-数据类型-字符串-string
字符串 -- string 字符串使用双引号表示 " " 多行或原始字符串(反斜杠失去转义行为)使用 反引号 `` 字符使用单引号表示 ' ',表示单独的字母.中文.数字 字符串转 ...
- 个人项目(wc.exe)
一.项目在GitHub上的地址: ·https://github.com/DawsonHuang/Word_Count 二.项目描述: ·项目名:WordCount(以下简称WC或项目) ·项目简述: ...
- 半夜删你代码队 Day1冲刺
一.团队信息 1.团队项目:Midnight聊天室 2.团队名称:半夜删你代码队 3.队员信息: 职务 项目经理 主开发团队 测试人员 姓名 陈惠霖 周楚池 侯晓龙 余金龙 胡兆禧 林涛 二.Alph ...
- AcWing 404. 婚礼
大型补档计划 题目链接 根据题意,显然只有新郎这边可能存在矛盾,考虑这边怎么放即可,新娘那边的放法与这边正好相反且一一对应. 显然对于两个约束条件是一对矛盾,开始我以为可以用并查集,后来发现输出方案的 ...