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 ...
随机推荐
- (八)函数调用为何会发生“Stack Overflow”
一.一次函数调用分析 c代码: // function_example.c #include <stdio.h> int static add(int a, int b) { return ...
- 使用PyQt进行Python图形界面程序开发文章目录
☞ ░ 前往老猿Python博文目录 ░ PyQt入门知识原来是作为老猿Python<Python基础教程目录>后的进阶学习章节存在,最近不少专栏作者提醒老猿整体的博文内容不错,但博文没有 ...
- 直接插入排序(python实现)
这篇博文用来介绍直接插入排序 直接插入排序基本思想: 每次将一个待排序的记录插入到已经排好序的数据区中,直到全部插入完为止 直接插入排序算法思路: 在直接插入排序中,数据元素分为了有序区和无序区两个部 ...
- Java 8 中的方法引用,轻松减少代码量,提升可读性!
1. 引言 Java8中最受广大开发中喜欢的变化之一是因为引入了 lambda 表达式,因为这些表达式允许我们放弃匿名类,从而大大减少了样板代码,并提高了可读性. 方法引用是lambda表达式的一种特 ...
- 题解-Words
题面 Words 有 \(n\) 天,每天插入一个字符集大小为 \(c\) 长度为 \(l\) 的字符串,求每一天建立 \(\tt Trie\) 树的期望节点数(根节点不算)模 \(998244353 ...
- 题解 CF1062E Company
\(\texttt{Solution}\) 数据结构学傻的蒟蒻来写一个新思路 这题的正解是利用多个结点的 \(lca\) 是 \(dfs\) 序最大的结点和 \(dfs\) 序最小的结点的 \(lca ...
- NOI2008 志愿者招聘
文化课 + 竞赛双废物又来水题解了. 首先,对于题干中的人,很像网络流中的流量,但是他有一个每天人数的下限,我从网上借鉴(chaoxi)到了两种思路: 把下界限制转化为一条边的流量下界,这样就是最小费 ...
- SP7022 CPATTERN - Cow Patterns
本篇题解用于作者本人加深理解,也欢迎大家阅读. 这道题的正解是\(KMP\)加上树状数组,记录每一个位置前几个位置比其小的.相等的.大的数的数量,比较方式便是比较相应的数量,若相等,则匹配成功. 但是 ...
- rocketMq指定broker ip地址,适合解决云主机部署问题
在工作中遇到了一个这个问题,就是我们rocketmq是部署在云主机上的 但是我们的开发同事在自己的电脑连接rocketmq链接不上 报错显示Caused by: org.apache.rocket ...
- linux的Umask 为022 和027 都是什么意思?
用全部权限777去减这个数值 一.022表示默认创建新文件权限为755 也就是 rxwr-xr-x(所有者全部权限,属组读写,其它人读写) 二.027表示默认创建新文件权限为750 也就是rxwr- ...