2020牛客暑期多校训练营(第八场)I.Interesting Computer Game并查集
题目链接:Interesting Computer Game
题意
n个回合,每个回合输出两个数,分别是ai、bi,且每个回合求进行三个操作中的一个操作,分别是①不进行操作,②如果之前的回合中未选出过ai,则可以选出ai,③如果之前的回合中未选出过bi,则可以选出bi。求n个回合后,获得不同数字个数的最大值。
题解
并查集维护连通块的点数和边数。
具体相同祖先的点都属于同个连通块;
每次合并都等同于两个较小连通块合并成一个较大的连通块,对各连通块的祖先维护点数和边数;
若出现已经合并的情况下,则说明是在该连通块中加上多一条边。
对于每个连通块,如果有x个点、y条边,则有y≥x-1
若y=x-1,则说明该连通块是最小连通块,恰好连通,对答案贡献为x-1
若y≥x,则该连通块所有的点都可以选,对答案贡献为x
注意:ai和bi的值是[-1e9,1e9],所以不可能直接对ai和bi值的大小维护并查集,故可以map记录每个不同数字第一次出现的下标,分别对不同数字出现的下标维护并查集;最坏的情况是n,且每次出现的点都不一样,维护并查集的数组需要预处理开销到2*n。
#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define endl "\n"
const int MAX=2e5+7;
ll pre[MAX];
ll Vnum[MAX],Enum[MAX];
ll FIND(ll x)
{return pre[x]==x?x:pre[x]=FIND(pre[x]);
}
int main(){ios_base::sync_with_stdio(0);cin.tie(0);ll T;cin>>T;for(ll t=1;t<=T;t++){map<ll,ll>vis;ll n;cin>>n;for(ll i=0;i<=2*n;i++)pre[i]=i,Vnum[i]=1,Enum[i]=0;ll u,v,cnt=1;for(ll i=1;i<=n;i++){cin>>u>>v;if(vis[u]==0) vis[u]=cnt++;u=vis[u];if(vis[v]==0)vis[v]=cnt++;v=vis[v];u=FIND(u);v=FIND(v);if(u!=v){pre[v]=u;Vnum[u]+=Vnum[v];Enum[u]+=Enum[v]+1;}else if(u==v)Enum[u]++;}ll ans=0;for(ll i=1;i<=cnt;i++){if(FIND(i)==i){if(Enum[i]>=Vnum[i])ans+=Vnum[i];else ans+=Vnum[i]-1;}}cout<<"Case #"<<t<<": "<<ans<<endl;}return 0;
}
2020牛客暑期多校训练营(第八场)I.Interesting Computer Game并查集相关推荐
- 2020牛客暑期多校训练营(第一场)
文章目录 A B-Suffix Array B Infinite Tree C Domino D Quadratic Form E Counting Spanning Trees F Infinite ...
- 2020牛客暑期多校训练营(第二场)
2020牛客暑期多校训练营(第二场) 最烦英语题 文章目录 A All with Pairs B Boundary C Cover the Tree D Duration E Exclusive OR ...
- E Groundhog Chasing Death(2020牛客暑期多校训练营(第九场))(思维+费马小定理+质因子分解)
E Groundhog Chasing Death(2020牛客暑期多校训练营(第九场))(思维+费马小定理+质因子分解) 链接:https://ac.nowcoder.com/acm/contest ...
- 2020牛客暑期多校训练营(第一场)A B-Suffix Array(后缀数组,思维)
链接:https://ac.nowcoder.com/acm/contest/5666/A 来源:牛客网 题目描述 The BBB-function B(t1t2-tk)=b1b2-bkB(t_1 t ...
- 2020牛客暑期多校训练营(第二场)Just Shuffle
https://ac.nowcoder.com/acm/contest/5667/J 题目大意:给你一个置换A,使得置换P^k=A,让你求出置换P. 思路:我们根据置换A再置换z次,那么就等于置换p ...
- 2020牛客暑期多校训练营(第一场)j-Easy Integration(思维,分数取模,沃斯利积分)
题目链接 题意: 给你一个积分公式,给你一个n,问积分公式的值取模后的结果. 思路: 积分公式(沃利斯积分)值的结论直接就是(n!)^2/(2n+1)!,求个阶乘,再用费马小定理给1/(2n+1)!取 ...
- 2020 牛客暑期多校训练营(第一场)F
题目大意: 多次输入两个a,b字符串他们可以无限次的重复变成aaa,或者bbb 比较他们的大小,相同输出 =,a<b输出 <,a>b输出 >. 输入: aa b zzz zz ...
- 2020牛客暑期多校训练营(第二场)未完待续......
F. Fake Maxpooling 题目: 题目大意: 输入n,m,k.矩阵的尺寸为nm,其中每一个元素为A[i][j] = lcm( i , j ).从中找出所有kk的子矩阵中元素最大的数之和. ...
- 2020牛客暑期多校训练营(第一场)J、Easy Integration (数学、分部积分)
题目链接 题面: 题意: 求给定的定积分. 题解,化成 ∫ xn (1-x)n dx 然后用分部积分法即可得. 分部积分法:∫ udv = uv - ∫ vdu 最终为 n!/((n+1)*(n+2) ...
- 2020牛客暑期多校训练营(第二场)题解
废话 蒟蒻不会积分,K不会做. 文章目录 废话 A. All with Pairs B. Boundary C. Cover the Tree D. Duration E. Exclusive OR ...
最新文章
- 回答跨专业考研者的几点疑问(计算机考研)
- ExtJS 的工具条及菜单
- 正确使用stl map的erase方法
- HDU 4616 Game 树形DP
- 《TCP/IP详解》学习笔记(六):UDP 协议
- 手写数字识别中多元分类原理_广告行业中那些趣事系列:从理论到实战BERT知识蒸馏...
- rest风格的get加密字符串怎么接收_RESTful Api的设计与风格,你该学一下咯
- 装饰器模式 decorator
- Atom飞行手册翻译: 4.1 配置API
- QT每日一练day13:QFileDialog文件浏览框
- [NOIP2015] 运输计划
- php excel引入tp,TP5引用PHPExcel实现导入导出功能
- A Frustratingly Easy Approach for Joint Entity and Relation Extraction(陈丹琦2020)
- Excel单元格引用
- vue图片加载不出来的问题
- 不想结婚要小孩了!怎么破?
- SpringBoot+Shiro实现登陆拦截功能
- 现在web前端主要做什么工作
- auc评测指标如何计算?其他的评测指标有吗?假设阙值为0.5,如何计算这个点?
- PPT形状的多种玩法
热门文章
- oracle的opm,Oracle OPM Demo流程
- 5GC architecture N1、N2、N3、N4、N6等接口
- java 搜索 下拉列表框_用java编写随用户输入自动弹出下拉列表匹配项目,类似百度搜索...
- 静态网页入门讲解,制作属于你自己的网页(一)
- [Android]如何做一个崩溃率少于千分之三噶应用app(31)-组件化网络请求
- TS 中 any 和 unknown 的区别
- 既生xargs何生parallel
- 中国民生银行 支付接口PHP DEMO
- 大数据开发·关于虚拟机Hadoop完全分布式集群搭建教程
- 淘宝api接口大全(参数返回值说明)