链接: I-Interesting Computer Game

题意:
给出 n 组 a,b,每次可以选择 a 或者选择 b ,问做多可以选多少个不同的数。
思路:
考虑每个连通块 , 如果是 n 个点 n-1条边,那么这个连通块中肯定只有一个点是取不到的,如果再随便在连通块里加一条边,那所有的点就都可以取到了。所以只要并查集维护连通块中点的个数,在 vis 标记一下有没有多余的边(即有没有环)。
代码:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <stack>
#include <bitset>
#include <vector>
#include <map>
#include <string>
#include <cstring>
#define fir first
#define sec second
using namespace std;
typedef long long ll;
const int maxn = 2e5+7;
const ll mod = 998244353;
int n,a[maxn],b[maxn],val[maxn],fa[maxn],vis[maxn],cnt[maxn],ans;
int T,k;
int find(int u){if(fa[u] != u) fa[u] = find(fa[u]);return fa[u];
}
void conbine(int u,int v){int temp1 = find(u);int temp2 = find(v);if(temp1 == temp2) vis[temp1] = 1;else{if(vis[temp1]||vis[temp2]) vis[temp1] = vis[temp2] = 1;cnt[temp1] += cnt[temp2];fa[temp2] = temp1;}
}
void init(int k1){for(int i = 0; i <= k1; i++){fa[i] = i;cnt[i] = 1;vis[i] = 0;}k = 0;ans = 0;
}
int main(){scanf("%d",&T);int ca = 1;while(T--){scanf("%d",&n);init(n*2);for(int  i = 0; i < n; i++){scanf("%d%d",&a[i],&b[i]);val[k++] = a[i];val[k++] = b[i];}sort(val,val+k);int k1 = unique(val,val+k) - val;for(int i = 0; i < n; i++){a[i] = lower_bound(val,val+k1,a[i])-val+1;b[i] = lower_bound(val,val+k1,b[i])-val+1;}for(int i = 0; i < n; i++){conbine(a[i],b[i]);}for(int i = 1; i <= k1; i++){if(find(i) == i){ans += cnt[find(i)] + vis[find(i)] - 1;}}printf ("Case #%d: %d\n",ca++,ans);}
}

2020牛客暑期多校训练营(第八场)I-Interesting Computer Game(并查集 + 思维)相关推荐

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

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

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

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

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

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

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

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

  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. Springboot前后端分离上传、下载压缩包、查看文件
  2. solr源码分析之searchComponent
  3. aliyun服务器安装git,g++
  4. SAP 电商云 Spartacus Checkout 端到端测试
  5. ArcGIS实验教程——实验三十二:ArcGIS水文分析(流向分析、计算水流长度、汇流分析、河网分析、流域分析)
  6. C#的变迁史09 - C# 5.0 之调用信息增强篇
  7. SpringBoot 扫描包
  8. IMP-00002: 无法打开 D:\orcldat\test_20111024.dmp 进行读取,rman备份
  9. python 全中文匹配字符_Python教程:进程和线程amp;正则表达式
  10. 认知智能,AI 的下一个十年 | AI Procon 2020
  11. jave导出mysql_java导出mysql数据到excel(poi)
  12. 百度文库收费文档下载方法
  13. ‘__NR_sigreturn’ was not declared in this scope
  14. 【小强推歌】---香港历年10大中文金曲 下载 1978-2002
  15. 中国通史—春秋战国的学术思想
  16. android移植wifi驱动流程porting
  17. 计算机策略组 网络,组策略
  18. php生成随机小数保留一位,php生成0~1随机小数的方法(必看)
  19. 智慧园区智能化管理系统解决方案
  20. STM32项目设计:基于STM32的风向风速测量仪

热门文章

  1. SIFT特征点提取及描述论文算法详解
  2. python中lcat是什么意思_lcatro/Machine-Learning-Note: 机器学习笔记
  3. 苹果CMS 10播放地址倒序排列
  4. 汽车芯片的可靠性为其他行业打开了大门
  5. [导入]理解C#值类型与引用类型
  6. java date 操作_java日期操作-java Date-java Calendar-嗨客网
  7. Flink 如何处理背压
  8. 高校新闻网-微信小程序
  9. 山西省大学计算机专业排名,山西省:排名前14的大学!山西的大学分为5档,前2档最难考!...
  10. devsigh,程序员的一声叹息