Problem C C 、 小 花梨 判连通
时间限制:2000ms 空间限制:512MB
Description
小花梨给出?个点,让?位同学对这?个点任意添加无向边,构成?张图。小花梨想知道对于
每个点?,存在多少个点?(包括?本身),使得?和?在这?张图中都是连通的。
Input
第一行输入两个正整数?和?,分别表示点的个数和同学数。
接下来分成?部分进行输入,每部分输入格式相同。
每部分第一行输入一个整数??,表示第?位同学连边的数目。
接下来??行,每行两个正整数?,?,表示第?位同学将点?和点?之间进行连接。
可能会存在重边或者自环。
(1 ≤ ? ≤ 100000,1 ≤ ? ≤ 10,1 ≤ ?,? ≤ ?,0 ≤ ?? ≤ 200000)
Output
输出?行,第?行输出在?张图中都和编号为?的点连通的点的数目(包括?本身)
Example
Sample Input Sample Output
4 2
3
1 2
1 3
2 3
2
1 2
3 4
2
2
1
1

思路:

· 我们如果根据图中每一条边进行并查集的merge,那么在一张图中,如果两个节点联通,那么他们的祖先一定相等。

那么我们对每一个节点创建一个vector,来依次存它在k张图中的祖先。

那么我们可以知道 如果两个节点在k张图中都联通,那么它们的vector数组是相等的。

然后我们不妨使用map对vector 出现的次数进行统计,从而可以得出答案。

细节见代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
#include <iomanip>
#define ALL(x) (x).begin(), (x).end()
#define sz(a) int(a.size())
#define all(a) a.begin(), a.end()
#define rep(i,x,n) for(int i=x;i<n;i++)
#define repd(i,x,n) for(int i=x;i<=n;i++)
#define pii pair<int,int>
#define pll pair<long long ,long long>
#define gbtb ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define MS0(X) memset((X), 0, sizeof((X)))
#define MSC0(X) memset((X), '\0', sizeof((X)))
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define eps 1e-6
#define gg(x) getInt(&x)
#define chu(x) cout<<"["<<#x<<" "<<(x)<<"]"<<endl
using namespace std;
typedef long long ll;
ll gcd(ll a, ll b) {return b ? gcd(b, a % b) : a;}
ll lcm(ll a, ll b) {return a / gcd(a, b) * b;}
ll powmod(ll a, ll b, ll MOD) {ll ans = 1; while (b) {if (b % 2) { ans = ans * a % MOD; } a = a * a % MOD; b /= 2;} return ans;}
inline void getInt(int *p);
const int maxn = 100010;
const int inf = 0x3f3f3f3f;
/*** TEMPLATE CODE * * STARTS HERE ***/
int far[maxn];
int n;
void init()
{repd(i, 1, n) {far[i] = i;}
}
int findpar(int x)
{if (x == far[x]) {return x;} else {return far[x] = findpar(far[x]);}
}void merge_(int x, int y)
{x = findpar(x);y = findpar(y);if (x != y) {far[x] = y;}
}int k;
std::vector<int> v[maxn];
map<vector<int>, int> vis;int main()
{//freopen("D:\\code\\text\\input.txt","r",stdin);//freopen("D:\\code\\text\\output.txt","w",stdout);gbtb;cin >> n >> k;int num;while (k--) {init();cin >> num;repd(i, 1, num) {int x, y;cin >> x >> y;merge_(x, y);}repd(i, 1, n) {v[i].push_back(findpar(i));}}// repd(i, 1, n) {//     for (auto x : v[i]) {//         cout << x << " ";//     }//     cout << endl;// }repd(i, 1, n) {vis[v[i]]++;}repd(i, 1, n) {cout << vis[v[i]] << endl;}return 0;
}inline void getInt(int *p)
{char ch;do {ch = getchar();} while (ch == ' ' || ch == '\n');if (ch == '-') {*p = -(getchar() - '0');while ((ch = getchar()) >= '0' && ch <= '9') {*p = *p * 10 - ch + '0';}} else {*p = ch - '0';while ((ch = getchar()) >= '0' && ch <= '9') {*p = *p * 10 + ch - '0';}}
}

转载于:https://www.cnblogs.com/qieqiemin/p/11491137.html

“美登杯”上海市高校大学生程序设计 C. 小花梨判连通 (并查集+map)相关推荐

  1. “美登杯”上海市高校大学生程序设计邀请赛 **D. 小花梨的取石子游戏**

    "美登杯"上海市高校大学生程序设计邀请赛 (华东理工大学) D. 小花梨的取石子游戏 Description 小花梨有?堆石子,第?堆石子数量为??,?堆石子顺时针编号为1 − ? ...

  2. “美登杯”上海市高校大学生程序设计邀请赛 (华东理工大学)

    Problem A 小花梨的字符串 https://acm.ecnu.edu.cn/contest/173/problem/A/ 题意:对区间子字符串排列,使得满足条件,求排列最长. 题解: C++版 ...

  3. 美登杯”上海市高校大学生程序设计邀请赛 Problem E 、 小 花梨 的数组 (线段树)...

    Problem E E . 小 花梨 的数组 时间限制:1000ms 空间限制:512MB Description 小花梨得到了一个长度为?的数组?,现在要对它进行三种操作: ⚫ 1 ? ] ∗ ⚫ ...

  4. “美登杯”上海市高校大学生程序设计赛B. 小花梨的三角形(模拟,实现)

    题目链接:https://acm.ecnu.edu.cn/contest/173/problem/B/#report9 Problem B B . 小 花梨 的 三角形 时间限制:1000ms 空间限 ...

  5. “美登杯”上海市高校大学生程序设计邀请赛 (华东理工大学)E. 小花梨的数组

    题目链接:https://acm.ecnu.edu.cn/contest/173/problem/E/ 题意:Description 小花梨得到了一个长度为?的数组?,现在要对它进行三种操作: ⚫ 1 ...

  6. 小花梨判连通(DFS或BFS或并查集+vector+map)——“美登杯”上海市高校大学生程序设计邀请赛 (华东理工大学)

    (https://acm.ecnu.edu.cn/contest/173/problem/C/) 题目大意: 小花梨给出?个点,让?位同学对这?个点任意添加无向边,构成?张图.小花梨想知道对于每个点? ...

  7. “美登杯”上海市高校大学生程序设计邀请赛(华东理工大学) 小花梨的取石子游戏(博弈)

    Description 小花梨有?堆石子,第?堆石子数量为??,?堆石子顺时针编号为1 − ?(如图) . 游戏将进行?轮,每轮游戏单独进行,互不干扰,每轮初始时第?堆石子数目为??. 第?轮从编号为 ...

  8. 上海市高校大学生程序设计邀请赛 C:小花梨判连通

    上海市高校大学生程序设计邀请赛 C:小花梨判连通 Problem C.小花梨判连通 时间限制:2000ms 空间限制:512MB Description 小花梨给出?个点,让?位同学对这?个点任意添加 ...

  9. 字节跳动杯2018中国大学生程序设计竞赛-女生专场题解

    以下所有AC题解程序来自"仙客传奇"团队. A. 口算训练 题解链接: ABDFHK "字节跳动杯"2018中国大学生程序设计竞赛-女生专场 B. 缺失的数据范 ...

最新文章

  1. java get不支持_java – HTTP Get:只下载头文件? (HEAD不支持)
  2. JZOJ 3886. 【长郡NOIP2014模拟10.22】道路维护
  3. 【ORACLE 高可用】ORACLE STREAM 基于用户的流复制配置 案例
  4. SAP CRM product category search - hidden search attribute
  5. Hive 导数据到本地(2种方式)
  6. nutz 自定义sql的使用
  7. Linux篇:Shell脚本实现Gitlab双备份
  8. Python和RF编写接口自动化
  9. 防火墙技术之安全区域
  10. DHT11详细介绍(内含51和STM32代码)
  11. RK3568平台开发系列讲解(环境篇)RK3568 SDK Linux编译服务器开发坏境搭建
  12. 阳光沙滩博客系统后端api
  13. BBR 加速比收敛图解
  14. 原创超简单代码(1.18.50)
  15. C++20协程初探!
  16. BufferedRead
  17. Jmeter中运行按钮点了没反应
  18. 荣耀6plus android6.0,旧瓶装新酒,大妈助我把级升 — 荣耀6Plus升级安卓6.0体验分享...
  19. 无法添加内核模式驱动的打印机
  20. linux下cp复制目录时排除某些目录的方法分享,Linux 下复制(cp)目录时排除一个或者多个目录的方法...

热门文章

  1. SAP S/4HANA生产订单抬头字段的维护
  2. SAP BOPF和ESF2这两个框架有什么区别
  3. cap理论具体含义_分布式事务的CAP理论
  4. mysql coreseek_centos+php+coreseek+sphinx+mysql之一coreseek安装篇
  5. scanf返回值_IO FILE之任意读写和scanf的限制绕过
  6. python打开方式包括_python打开文件的方式有哪些
  7. filepath直接指定到文件名吗_PyTest运行指定的测试集
  8. 如何获取如何获取datagrid复选框的值_未定事件簿泪之约定如何获取-未定事件簿泪之约定获取技巧...
  9. UE4学习-在虚幻编辑器中打开VS的三种方式
  10. python 找到目录下文件名规则_Python学习第162课--PATH变量值修改以及模糊查找文件名...