题目连接

                        Time Limit: 4 second(s) Memory Limit: 32 MB

The Vampires and Lykans are fighting each other to death. The war has become so fierce that, none knows who will win. The humans want to know who will survive finally. But humans are afraid of going to the battlefield.

So, they made a plan. They collected the information from the newspapers of Vampires and Lykans. They found the information about all the dual fights. Dual fight means a fight between a Lykan and a Vampire. They know the name of the dual fighters, but don’t know which one of them is a Vampire or a Lykan.

So, the humans listed all the rivals. They want to find the maximum possible number of Vampires or Lykans.

Input
Input starts with an integer T (≤ 10), denoting the number of test cases.

Each case contains an integer n (1 ≤ n ≤ 105), denoting the number of dual fights. Each of the next n lines will contain two different integers u v (1 ≤ u, v ≤ 20000) denoting there was a fight between u and v. No rival will be reported more than once.

Output
For each case, print the case number and the maximum possible members of any race.

Sample Input
2
2
1 2
2 3
3
1 2
2 3
4 2

Output for Sample Input
Case 1: 2
Case 2: 3

Note
Dataset is huge, use faster I/O methods.

这道题题意就不多说了,我之前也是想了很多方法都但都是因为数据量太大都错了,就是没有想到二分染色标记这个巧妙的方法,相连的两个肯定是不同的颜色,对于同一个联通及来说,用这种方法就可以吧一个联通图的两个点集的大小求出来,然后对所有的联通图遍历一遍,吧最大电集的个数加起来就可以,至于如何遍历就直接用dfs就可以了。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;const int N = 20020;
vector<int> vec[N];// 用vector容器存储与某个点相连的所有点
bool appear[N];
bool visited[N];
int sum, sum1;void dfs(int u, int flag)// 这里用了一个flag进行二分染色,染色为 0 和1 两种(妙)
{sum++;if(flag) sum1++;visited[u] = true;for(int i = 0; i < vec[u].size(); i++){int v = vec[u][i];if(!visited[v])dfs(v, !flag);}
}int main()
{int t, countt = 0;scanf("%d", &t);while(t--){int n;int max_index = 0;int ans = 0;scanf("%d", &n);for(int i = 0; i <= 20000; i++){appear[i] = visited[i] = false;vec[i].clear();//vec[i].reserve(N);//这个之所以写了一个初始化vector的容量,是因为为了减少时间,但是这道题所需的空间太大了// 会超内存限制的,想了解我说的这个减少时间的意思的话。可以去查一查vector的使用。 代码下面有连接。}while(n--){int u, v;scanf("%d%d", &u, &v);vec[u].push_back(v);vec[v].push_back(u);appear[u] = appear[v] = true;max_index = max(max_index, max(u, v));}for(int i = 1; i <= max_index; i++){if(!appear[i] || visited[i]) continue;sum = sum1 = 0; dfs(i, 0);ans += max(sum1, sum - sum1);}printf("Case %d: %d\n", ++countt, ans);}return 0;
}

vector的内存管理与效率

1009 - Back to Underworld(DFS)相关推荐

  1. 三十二、图的创建深度优先遍历(DFS)广度优先遍历(BFS)

    一.图的基本介绍 为什么要有图 前面我们学了线性表和树 线性表局限于一个直接前驱和一个直接后继的关系 树也只能有一个直接前驱也就是父节点 当我们需要表示多对多的关系时, 这里我们就用到了图. 图的举例 ...

  2. 【 MATLAB 】离散傅里叶级数(DFS)及 IDFS 的 MATLAB 实现

    有关离散傅里叶级数(DFS)我之前也写过一些博文,例如:离散周期信号的傅里叶级数(DFS) 这里我再次给出标准公式. 分析式: 其中: 综合式: 这里我必须先声明,关于分析式和综合式前面那个系数1/N ...

  3. 部署分布式文件系统(DFS)

    部署分布式文件系统(DFS) 使用 DFS 命名空间,可以将位于不同服务器上的共享文件夹组合到一个或多个逻辑结构的命名空间.每个命名空间作为具有一系列子文件夹的单个共享文件夹显示给用户.但是,命名空间 ...

  4. Java实现算法导论中图的广度优先搜索(BFS)和深度优先搜索(DFS)

    对算法导论中图的广度优先搜索(BFS)和深度优先搜索(DFS)用Java实现其中的伪代码算法,案例也采用算法导论中的图. import java.util.ArrayList; import java ...

  5. 广度优先搜索(BFS)与深度优先搜索(DFS)

    一.广度优先搜索(BFS) 1.二叉树代码 # 实现一个二叉树 class TreeNode:def __init__(self, x):self.val = xself.left = Nonesel ...

  6. 7.9模拟赛T1图的遍历(dfs)

    图的遍历(dfs) [题目描述] 对于一个有向图G来说,我们存在一个经典的遍历算法,就是DFS (深度优先搜索遍历).将G以1号点为起点进行DFS后,我们可以 得到G的一棵DFS遍历树T.就此,我们可 ...

  7. 7.6 T1 深度优先搜索(dfs)

    深度优先搜索(dfs) [题目描述] sol:50pts随便写写,就是大众分了,直接n2dpOK,100分要找点规律,需要数学头脑 官方题解 //#include <bits/stdc++.h& ...

  8. 二叉树的深度优先遍历(DFS)与广度优先遍历(BFS)

    二叉树的深度优先遍历(DFS)与广度优先遍历(BFS) 深度优先遍历:从根节点出发,沿着左子树方向进行纵向遍历,直到找到叶子节点为止.然后回溯到前一个节点,进行右子树节点的遍历,直到遍历完所有可达节点 ...

  9. 深度优先遍历(DFS)- Letter CasePermutation - Combinations

    深度优先遍历(DFS) 思路:从图中一个未访问的顶点V开始,沿着一条路一直走到尽头,然后从这条路尽头的节点回退到上一个节点,再从另一条路开始走到尽头-,不断递归重复此过程,直到所有顶点都遍历完成. 特 ...

  10. dfs深度优先搜索_图的深度优先搜索(DFS)

    dfs深度优先搜索 Depth First Search (DFS) is an algorithm that searches a graph/tree, in a depth-wise manne ...

最新文章

  1. OpenCL产业开发链
  2. 怎么用python判断数据是否已经存在于表里_数据基本操作(二)
  3. C++ gets, getline ( string流)
  4. SharePoint 2013 InfoPath 无法保存下列表单
  5. 信息安全-5:RSA算法详解(已编程实现)[原创]
  6. vue表单中批量导入功能_spring boot mybatis+ vue 使用POI实现从Excel中批量导入数据
  7. 升级鸿蒙3.0需要备份吗,升级鸿蒙OS3.0机型曝光!大哥,你是认真的吗?
  8. 蓝桥杯上Excel地址c语言,C语言求解Excel地址转换问题
  9. Leetcode之通配符匹配
  10. C语言程序设计-谭浩强第五版习题【答案解析】2022.5.10
  11. 10秒!看清导数与微分的关系
  12. linux统计单拷贝基因家族,为什么所有病毒基因都是单拷贝
  13. 【项目】森林预言家——森林火灾预防系统
  14. 光猫 路由器 和交换器
  15. 关于SQLの大题练习
  16. 在CSDN高校俱乐部校园巡讲中遇到的几个共性问题
  17. 【redis】SpringBoot整合+geo地理位置应用
  18. 第二代商用计算机,紫光计算机第二代商用台式机 Unis 526S/526T G2 上市
  19. 什么人合适学习利用自媒体淘客来赚钱
  20. 设计一个适合三维网格重建的卷积神经网络

热门文章

  1. Android会议室管理app
  2. 知乎高赞:哪些事坚持做3个月就会有巨大改变?
  3. Monty Hall Problem (三门问题)
  4. 帆软报表更新到服务器控件展示不出来_报表工具软件FineReport常见问题与解答总结...
  5. Xilinx FPGA MIPI 接口简单说明
  6. JPA中的could not initialize proxy - no Session异常分析与解决
  7. 自然语言处理 cs224n 2019 Lecture 11: ConvNets for NLP
  8. 微信看一看+视频下载方法
  9. Excel AES加密
  10. Photoshop教程实例讲解