Day_1(并查集朋友圈、字典序排序)
1.并查集
朋友圈:找出最多的一个圈子内有多少用户!
- id[](表示当前节点的父节点)
- nodeNum[] (表示当前节点为根的那一组节点数量)
import java.util.Scanner;
//并查集
class UnionFind{
int[] id; //表示当前结点的父节点
int[] nodeNum; //表示当前节点为根的那一组的节点数量
int[] height; //表示当前节点为跟的那一组的节点数高度
int num; //连通集的数目
public UnionFind(int n){
num = n;
id = new int[n];
nodeNum = new int[n];
height = new int[n];
for(int i=0;i<n;i++){
id[i] = i;
nodeNum[i] = 1;
height[i] = 1;
}
}
public int find(int p){
while(p != id[p]){
p = id[p];
}
return p;
}
public void Union(int p,int q){
int i = find(p);
int j = find(q);
if(i!=j){
if(height[i]>height[j]){
id[j] = i;
nodeNum[i] += nodeNum[j];
}else if(height[i]<height[j]){
id[i] = j;
nodeNum[j] += nodeNum[i];
}else{
id[i] = j;
nodeNum[j] += nodeNum[i];
height[j]++;
}
num--;
}
}
}
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int times = sc.nextInt();
while (times > 0) {
int n = sc.nextInt();
UnionFind uf = new UnionFind(10000001);
for(int i=0;i<n;i++){
int a = sc.nextInt();
int b = sc.nextInt();
uf.Union(a,b);
}
int max = 1;
for(int i=0;i<uf.nodeNum.length;i++){
if(max<uf.nodeNum[i]){
max = uf.nodeNum[i];
}
}
System.out.println(max);
times--;
}
}
}
2.按字典序排序的第k小子串
1、找出所有字串
2、字串按照字典序排序
3、找出第k小的字串
import java.util.Scanner;
//字典序第k小的字串
class Heap{
String[] str;
public Heap(int n){
str = new String[n];
}
//比较大小函数
public boolean CmpStr(String str1,String str2){
int len1 = str1.length();
int len2 = str2.length();
int i =0;
while(len1>0&&len2>0){
if(str1.charAt(i)<str2.charAt(i)) return true;
if(str1.charAt(i)>str2.charAt(i)) return false;
len1--;
len2--;
i++;
}
if(len2>0) return true;
else return false;
}
//调整大根堆函数
public void HeadAdjust(int k,int len){
str[0] = str[k];
for(int i=2*k;i<=len;i*=2){
if(i<len && CmpStr(str[i],str[i+1])) i++;
if (CmpStr(str[i],str[0])) break;
else{
str[k] = str[i];
k=i;
}
}
str[k] = str[0];
}
public void BuildMaxHeap(int len){
for(int i=len/2;i>0;i--){
HeadAdjust(i,len);
}
}
}
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
int n = sc.nextInt();
Heap hs = new Heap(100);
int k=0;
int count = 0;
boolean p=true;
for(int len = 1; len <= n; len ++) {
for (int i = 0; i < str.length() - len + 1; i++) {
String substr = str.substring(i, i + len);
if(k>0){
for(int j=0;j<k;j++){
if(substr.equals(hs.str[j+1])) p=false;
}
}
if(p){
if(count<n){
k++;
count++;
hs.str[k] = substr;
hs.BuildMaxHeap(k);
}else{
if(hs.CmpStr(substr,hs.str[1])){
hs.str[1] = substr;
hs.BuildMaxHeap(k);
}
}
}else{
p = true;
}
}
}
System.out.println(hs.str[1]);
}
}
//aaddsfsddsf
//5
//aadds
Day_1(并查集朋友圈、字典序排序)的更多相关文章
- Going from u to v or from v to u?_POJ2762强连通+并查集缩点+拓扑排序
Going from u to v or from v to u? Time Limit: 2000MS Memory Limit: 65536K Description I ...
- HDU3367+并查集应用
题意:找到一个这样的图,在这个图中,最多有一个环. 使得所有的边的和最大. 贪心+并查集 首先把边排序,然后开始分类讨论. 对于边ab(含有两个端点ab) 如果a,b是属于两个不同的集合 a b 是两 ...
- Codevs 2597 团伙(并查集)
2597 团伙 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 传送门 题目描述 Description 1920年的芝加哥,出现了一群强盗.如果两个强盗遇上了,那么 ...
- 九度OJ 朋友圈 -- 并查集
题目地址:http://ac.jobdu.com/problem.php?pid=1526 题目描述: 假如已知有n个人和m对好友关系(存于数字r).如果两个人是直接或间接的好友(好友的好友的好友.. ...
- PTA 朋友圈 (25 分) 代码详解 (并查集)
1.题目要求: 某学校有N个学生,形成M个俱乐部.每个俱乐部里的学生有着一定相似的兴趣爱好,形成一个朋友圈.一个学生可以同时属于若干个不同的俱乐部.根据"我的朋友的朋友也是我的朋友" ...
- Java实现 LeetCode 547 朋友圈(并查集?)
547. 朋友圈 班上有 N 名学生.其中有些人是朋友,有些则不是.他们的友谊具有是传递性.如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友.所谓的朋友圈,是指 ...
- HDU1811 拓扑排序判环+并查集
HDU Rank of Tetris 题目:http://acm.hdu.edu.cn/showproblem.php?pid=1811 题意:中文问题就不解释题意了. 这道题其实就是一个拓扑排序判圈 ...
- 九度OJ 1156:谁是你的潜在朋友 (并查集)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5802 解决:2593 题目描述: "臭味相投"--这是我们描述朋友时喜欢用的词汇.两个人是朋友通常意味着他们存在着许多 ...
- SPOJ:Lexicographically Smallest(并查集&排序)
Taplu and Abhishar loved playing scrabble. One day they thought of inventing a new game using alphab ...
- 拓扑排序 - 并查集 - Rank of Tetris
Description 自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球. 为了更好的符合那些爱好者的喜好,Lele又想了一个新点子:他将制作一个全球 ...
随机推荐
- Spring 01 统一资源加载策略 Resource和ResourceLoader
转:https://www.cnblogs.com/loveLands/articles/10797772.html 1 Resource统一资源 1.1 简介 处理外部资源是很繁琐的事情,我们可能需 ...
- Python装饰器实例讲解(三)
Python装饰器实例讲解(三) 本文多参考<流畅的python>,在此基础上增加了一些实例便于理解 姊妹篇 Python装饰器实例讲解(一),让你简单的会用 Python装饰器实例讲解( ...
- Javascript中0.1+0.2===0.3?怎么解决这个问题?
一.问题分析 计算机存储以二进制的方式,而0.1 在二进制中是无限循环的一个数字,所以会出现裁剪,精度丢失会出现,0.100000000000000002 === 0.1,0.200000000000 ...
- ArcGIS Pro SDK 003 如何调用Toolbox
1.如何调用普通的Tool ArcGIS中的Toolbox非常强大,做二次开发的时候,必不可少的会调用,在ArcObjects SDK中,每个Tool都会有自定义的类对应,例如栅格转矢量数据,定义在E ...
- 详解神经网络基础部件BN层
摘要:在深度神经网络训练的过程中,由于网络中参数变化而引起网络中间层数据分布发生变化的这一过程被称为内部协变量偏移(Internal Covariate Shift),而 BN 可以解决这个问题. 本 ...
- 微信小程序的全局弹窗以及全局实例
全局组件 微信小程序组件关系中,父组件使用子组件需要在父组件index.json中引入子组件,然后在父组件页面中使用,这种组件的对应状态是一对一的,一个组件对应一个页面.如果有一个全局弹窗(登录),那 ...
- 坏消息,new Date()方法在IOS系统中存在null值情况
背景介绍 笔者最近在开发小程序,发现在使用new Date()函数在电脑模拟器上倒是没什么影响能很好实现效果,但是在我的Iphone上看到的效果跟预想有出入. 图为在电脑微信小程序模拟器的效果图,可以 ...
- Linux操作命令(七) 1.cut命令 2.paste命令 3.tr命令
1.cut 命令 常用参数 参数 描述 -b 以字节为单位进行分割 -c 以字符为单位进行分割 -d 自定义分隔符,默认为制表符 -f 自定义字段 --complement 抽取整个文本行,除了那些由 ...
- 原生javascript解锁恶心的CSDN强制关注才能阅读让文章自动展开(转部分内容)
此时你可以打开chrome浏览器的开发者工具 快捷键F12, 然后切换到Console界面 然后复制上面的javascript代码 var article_content=document.getEl ...
- 在github上如何克隆带子模块的项目?
使用命令git clone --recursive xxxx(项目地址).