题目链接: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. ASP.NET简化编辑界面 V3
  2. SIP中的SDP offer/answer交换初探
  3. loadrunner与事务有关的函数
  4. android 中ScrollView的使用
  5. Shell 自定义函数
  6. Windows下struct和union字节对齐设置以及大小的确定(一 简介和结构体大小的确定)...
  7. IP SLA的路径控制
  8. 详细解读Python 递归函数!
  9. LeetCode:安排工作以达到最大收益【455】
  10. HTTP协议的请求与响应和CSS属性和定位
  11. vim java自动补全_java – eclim没有在vim中做自动完成
  12. 狼组安全平台免杀使用指南
  13. 中国特种电器灯泡行业市场供需与战略研究报告
  14. 熵的理解(玻尔兹曼分布)
  15. lIUNX如何加载U盘,光盘
  16. java程序往微信群里发消息_通过java程序,给微信发送消息
  17. A/BTest设计方案
  18. java计算机毕业设计学生成绩管理系统源程序+mysql+系统+lw文档+远程调试
  19. 3D展示框架SDK全面开放
  20. 前端网络基础-应用层DNS协议

热门文章

  1. SuperMap iClient3D for WebGL教程 粒子特效-扩展喷泉特效
  2. 2015年西北工业大学机试第八题
  3. dba_autotask_client
  4. 贪吃蛇大作战撞墙不死c语言,贪吃蛇大作战无敌版
  5. 从象牙塔学生到美团开发社畜,工作一年,谈谈经验及感想
  6. hp喷墨打印机加连供的处理
  7. 项目需求管理专栏︱如何进行高效的项目需求管理
  8. 妙用“Check out”与“Check In”
  9. 谈谈温度、压力、同位素设定对量子化学计算结果产生的影响
  10. Android 开发之Loading