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(并查集朋友圈、字典序排序)的更多相关文章

  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 ...

  2. HDU3367+并查集应用

    题意:找到一个这样的图,在这个图中,最多有一个环. 使得所有的边的和最大. 贪心+并查集 首先把边排序,然后开始分类讨论. 对于边ab(含有两个端点ab) 如果a,b是属于两个不同的集合 a b 是两 ...

  3. Codevs 2597 团伙(并查集)

    2597 团伙 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 传送门 题目描述 Description 1920年的芝加哥,出现了一群强盗.如果两个强盗遇上了,那么 ...

  4. 九度OJ 朋友圈 -- 并查集

    题目地址:http://ac.jobdu.com/problem.php?pid=1526 题目描述: 假如已知有n个人和m对好友关系(存于数字r).如果两个人是直接或间接的好友(好友的好友的好友.. ...

  5. PTA 朋友圈 (25 分) 代码详解 (并查集)

    1.题目要求: 某学校有N个学生,形成M个俱乐部.每个俱乐部里的学生有着一定相似的兴趣爱好,形成一个朋友圈.一个学生可以同时属于若干个不同的俱乐部.根据"我的朋友的朋友也是我的朋友" ...

  6. Java实现 LeetCode 547 朋友圈(并查集?)

    547. 朋友圈 班上有 N 名学生.其中有些人是朋友,有些则不是.他们的友谊具有是传递性.如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友.所谓的朋友圈,是指 ...

  7. HDU1811 拓扑排序判环+并查集

    HDU Rank of Tetris 题目:http://acm.hdu.edu.cn/showproblem.php?pid=1811 题意:中文问题就不解释题意了. 这道题其实就是一个拓扑排序判圈 ...

  8. 九度OJ 1156:谁是你的潜在朋友 (并查集)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5802 解决:2593 题目描述: "臭味相投"--这是我们描述朋友时喜欢用的词汇.两个人是朋友通常意味着他们存在着许多 ...

  9. SPOJ:Lexicographically Smallest(并查集&排序)

    Taplu and Abhishar loved playing scrabble. One day they thought of inventing a new game using alphab ...

  10. 拓扑排序 - 并查集 - Rank of Tetris

    Description 自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球. 为了更好的符合那些爱好者的喜好,Lele又想了一个新点子:他将制作一个全球 ...

随机推荐

  1. spring-in-action_day02

       开发web应用 # 开发Spring web应用,最基本的需要构建以下组件: 1.pojo类(从数据库获取数据) 2.pringmvc控制器 3.视图模板(页面) ##第一步 构建pojo类 p ...

  2. PopClip使用教程图文详解 2022.12亲测有效

    PopClip简介 PopClip mac版是Macos上一款增强型复制粘贴工具,当你选中文字后,PopClip会自动弹出复制.剪切.粘贴.搜索等等操作,除了复制粘贴外,PopClip还提供了很多的扩 ...

  3. .Net Framework创建grpc

    1.环境要求 .Net Framework 4.8 .Net Core 版本: https://www.cnblogs.com/dennisdong/p/17120990.html 2.Stub和Pr ...

  4. Vue过滤案例、按键修饰符、数据双向绑定

    目录 Vue过滤案例.按键修饰符.数据双向绑定 一.v-for能循环的类型 二.js的几种循环方式 三.key值的解释 四.数组.对象的检测与更新 五.input的几个事件 六.事件修饰符 七.按键修 ...

  5. P7_小程序的宿主环境

    宿主环境简介 什么是宿主环境 宿主环境(host environment)指的是程序运行所必须的依赖环境.例如:Android 系统和 iOS 系统是两个不同的宿主环境.安卓版的微信 App 是不能在 ...

  6. k8s中使用prometheus operator监控外部服务器部署的windows exporter

    k8s中使用prometheus operator监控外部服务器部署的windows exporter 0.文档说明 (1)Prometheus Operator是一个流行的k8s集群监控套件,项目地 ...

  7. MySQL 查询常用操作(0) —— 查询语句的执行顺序

    MySQL中明确查询语句的执行顺序极其重要,了解执行顺序才不至于犯一些简单错误,例如having 后面是否可以使用 select 中重命名的列名等问题.另外SQL中实际使用最频繁的就是查询(Quein ...

  8. Eureka服务治理

    Eureka是由Netflix开发的一款服务治理开源框架,Spring-cloud对其进行了集成.Eureka既包含了服务端也包含了客户端,Eureka服务端是一个服务注册中心(Eureka Serv ...

  9. Qt中的多窗体编程(续一)

    在前面一节中,已经把所有需要的窗体都创建好了,下面将依次实现预设的功能. 一.实现点击菜单打开模式子窗体的功能. 1.在编辑模式下双击Forms下的"mainWindow.ui", ...

  10. 新的学习历程-python5 输入输出基础

    1 uname=input("please input username:") 2 print("welcome",uname) #print各项间默认以空格作 ...