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. 从实现到原理,聊聊Java中的SPI动态扩展

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 八股文背多了,相信大家都听说过一个词,SPI扩展. 有的面试官就很喜欢问这个问题,SpringBoot的自动装配是如何实现的? 基本上,你一说是 ...

  2. 视觉十四讲:第六讲_g2o图优化

    g2o是一个基于图优化的库,图优化是把优化问题表现为一种图的方式.一个图由若干个顶点和边组成. 顶点表示优化变量,边表示误差项. g2o的使用步骤: 1.定义顶点和边的类型: 2.构建图: 3.选择优 ...

  3. JZOJ 4279. 【NOIP2015模拟10.29B组】树上路径

    题目 现在有一棵n个点的无向树,每个点的编号在1-n之间,求出每个点所在的最长路. 思路 换根 \(dp\),这里只是记下怎么打 \(Code\) #include<cstdio> #in ...

  4. Python:Excel自动化实践入门篇 甲【留言点赞领图书门票】

    *以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「englyf」https://mp.weixin.qq.com/s?__biz=MzUxMTgxMzExNQ==&mid=22 ...

  5. C#本地时间转Unix时间

    获取Unix时间最高效的方法 /// <summary> /// 扩展方法, 本地时间转Unix时间; (如 本地时间 "2020-01-01 20:20:10" 转换 ...

  6. 域名_服务器_IP之间的关系

    目的: 近期在搞A服务器和云服务器,以及正式环境的B服务器的时候,多次搞不清楚域名,IP的关系. 现在理解看来: IP 分为内网和外网的,以A为例,A是内网的IP,然后申请下来的外网IP是B(还真忘了 ...

  7. 2023.3.4Leecode982按位与为零的三元组

    题目的要求 给你一个整数数组 nums ,返回其中 按位与三元组 的数目. 按位与三元组 是由下标 (i, j, k) 组成的三元组,并满足下述全部条件: 0 <= i < nums.le ...

  8. MSB/LSB的意思

    MSB一般指最高有效位. 最高有效位( most significant bit,MSB)指的是一个n位二进制数字中的n-1位,具有最高的权值2^(n-1).最低有效位和最高有效位是相对应的概念. L ...

  9. Vulnhub:ReconForce-01.1靶机

    kali:192.168.111.111 靶机:192.168.111.200 信息收集 端口扫描 nmap -A -v -sV -T5 -p- --script=http-enum 192.168. ...

  10. accessservice对于难定位的view如何定位

    private static int tabcount = -1; private static StringBuilder sb; public static void printPacketInf ...