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又想了一个新点子:他将制作一个全球 ...
随机推荐
- 从实现到原理,聊聊Java中的SPI动态扩展
原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 八股文背多了,相信大家都听说过一个词,SPI扩展. 有的面试官就很喜欢问这个问题,SpringBoot的自动装配是如何实现的? 基本上,你一说是 ...
- 视觉十四讲:第六讲_g2o图优化
g2o是一个基于图优化的库,图优化是把优化问题表现为一种图的方式.一个图由若干个顶点和边组成. 顶点表示优化变量,边表示误差项. g2o的使用步骤: 1.定义顶点和边的类型: 2.构建图: 3.选择优 ...
- JZOJ 4279. 【NOIP2015模拟10.29B组】树上路径
题目 现在有一棵n个点的无向树,每个点的编号在1-n之间,求出每个点所在的最长路. 思路 换根 \(dp\),这里只是记下怎么打 \(Code\) #include<cstdio> #in ...
- Python:Excel自动化实践入门篇 甲【留言点赞领图书门票】
*以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「englyf」https://mp.weixin.qq.com/s?__biz=MzUxMTgxMzExNQ==&mid=22 ...
- C#本地时间转Unix时间
获取Unix时间最高效的方法 /// <summary> /// 扩展方法, 本地时间转Unix时间; (如 本地时间 "2020-01-01 20:20:10" 转换 ...
- 域名_服务器_IP之间的关系
目的: 近期在搞A服务器和云服务器,以及正式环境的B服务器的时候,多次搞不清楚域名,IP的关系. 现在理解看来: IP 分为内网和外网的,以A为例,A是内网的IP,然后申请下来的外网IP是B(还真忘了 ...
- 2023.3.4Leecode982按位与为零的三元组
题目的要求 给你一个整数数组 nums ,返回其中 按位与三元组 的数目. 按位与三元组 是由下标 (i, j, k) 组成的三元组,并满足下述全部条件: 0 <= i < nums.le ...
- MSB/LSB的意思
MSB一般指最高有效位. 最高有效位( most significant bit,MSB)指的是一个n位二进制数字中的n-1位,具有最高的权值2^(n-1).最低有效位和最高有效位是相对应的概念. L ...
- Vulnhub:ReconForce-01.1靶机
kali:192.168.111.111 靶机:192.168.111.200 信息收集 端口扫描 nmap -A -v -sV -T5 -p- --script=http-enum 192.168. ...
- accessservice对于难定位的view如何定位
private static int tabcount = -1; private static StringBuilder sb; public static void printPacketInf ...