题目链接: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并查集相关推荐

  1. 2020牛客暑期多校训练营(第一场)

    文章目录 A B-Suffix Array B Infinite Tree C Domino D Quadratic Form E Counting Spanning Trees F Infinite ...

  2. 2020牛客暑期多校训练营(第二场)

    2020牛客暑期多校训练营(第二场) 最烦英语题 文章目录 A All with Pairs B Boundary C Cover the Tree D Duration E Exclusive OR ...

  3. E Groundhog Chasing Death(2020牛客暑期多校训练营(第九场))(思维+费马小定理+质因子分解)

    E Groundhog Chasing Death(2020牛客暑期多校训练营(第九场))(思维+费马小定理+质因子分解) 链接:https://ac.nowcoder.com/acm/contest ...

  4. 2020牛客暑期多校训练营(第一场)A B-Suffix Array(后缀数组,思维)

    链接:https://ac.nowcoder.com/acm/contest/5666/A 来源:牛客网 题目描述 The BBB-function B(t1t2-tk)=b1b2-bkB(t_1 t ...

  5. 2020牛客暑期多校训练营(第二场)Just Shuffle

    https://ac.nowcoder.com/acm/contest/5667/J 题目大意:给你一个置换A,使得置换P^k=A,让你求出置换P. 思路:我们根据置换A再置换z次,那么就等于置换p ...

  6. 2020牛客暑期多校训练营(第一场)j-Easy Integration(思维,分数取模,沃斯利积分)

    题目链接 题意: 给你一个积分公式,给你一个n,问积分公式的值取模后的结果. 思路: 积分公式(沃利斯积分)值的结论直接就是(n!)^2/(2n+1)!,求个阶乘,再用费马小定理给1/(2n+1)!取 ...

  7. 2020 牛客暑期多校训练营(第一场)F

    题目大意: 多次输入两个a,b字符串他们可以无限次的重复变成aaa,或者bbb 比较他们的大小,相同输出 =,a<b输出 <,a>b输出 >. 输入: aa b zzz zz ...

  8. 2020牛客暑期多校训练营(第二场)未完待续......

    F. Fake Maxpooling 题目: 题目大意: 输入n,m,k.矩阵的尺寸为nm,其中每一个元素为A[i][j] = lcm( i , j ).从中找出所有kk的子矩阵中元素最大的数之和. ...

  9. 2020牛客暑期多校训练营(第一场)J、Easy Integration (数学、分部积分)

    题目链接 题面: 题意: 求给定的定积分. 题解,化成 ∫ xn (1-x)n dx 然后用分部积分法即可得. 分部积分法:∫ udv = uv - ∫ vdu 最终为 n!/((n+1)*(n+2) ...

  10. 2020牛客暑期多校训练营(第二场)题解

    废话 蒟蒻不会积分,K不会做. 文章目录 废话 A. All with Pairs B. Boundary C. Cover the Tree D. Duration E. Exclusive OR ...

最新文章

  1. 回答跨专业考研者的几点疑问(计算机考研)
  2. ExtJS 的工具条及菜单
  3. 正确使用stl map的erase方法
  4. HDU 4616 Game 树形DP
  5. 《TCP/IP详解》学习笔记(六):UDP 协议
  6. 手写数字识别中多元分类原理_广告行业中那些趣事系列:从理论到实战BERT知识蒸馏...
  7. rest风格的get加密字符串怎么接收_RESTful Api的设计与风格,你该学一下咯
  8. 装饰器模式 decorator
  9. Atom飞行手册翻译: 4.1 配置API
  10. QT每日一练day13:QFileDialog文件浏览框
  11. [NOIP2015] 运输计划
  12. php excel引入tp,TP5引用PHPExcel实现导入导出功能
  13. A Frustratingly Easy Approach for Joint Entity and Relation Extraction(陈丹琦2020)
  14. Excel单元格引用
  15. vue图片加载不出来的问题
  16. 不想结婚要小孩了!怎么破?
  17. SpringBoot+Shiro实现登陆拦截功能
  18. 现在web前端主要做什么工作
  19. auc评测指标如何计算?其他的评测指标有吗?假设阙值为0.5,如何计算这个点?
  20. PPT形状的多种玩法

热门文章

  1. oracle的opm,Oracle OPM Demo流程
  2. 5GC architecture N1、N2、N3、N4、N6等接口
  3. java 搜索 下拉列表框_用java编写随用户输入自动弹出下拉列表匹配项目,类似百度搜索...
  4. 静态网页入门讲解,制作属于你自己的网页(一)
  5. [Android]如何做一个崩溃率少于千分之三噶应用app(31)-组件化网络请求
  6. TS 中 any 和 unknown 的区别
  7. 既生xargs何生parallel
  8. 中国民生银行 支付接口PHP DEMO
  9. 大数据开发·关于虚拟机Hadoop完全分布式集群搭建教程
  10. 淘宝api接口大全(参数返回值说明)