Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.*;
- import java.util.*;
- public class Tree {
- FastScanner in;
- PrintWriter out;
- class Dsu {
- int[] p;
- Dsu(int n) {
- p = new int[n];
- for (int i = 0; i < n; i++) {
- p[i] = i;
- }
- }
- int get(int v) {
- return p[v] == v ? v : (p[v] = get(p[v]));
- }
- void unite(int x, int y) {
- p[get(x)] = get(y);
- }
- }
- double sum;
- int go(int v, int p, int curH, ArrayList<Integer>[] g) {
- int maxH = curH;
- for (int to : g[v]) {
- if (to != p) {
- maxH = Math.max(maxH, go(to, v, curH + 1, g));
- }
- }
- sum += curH * 1.0 * (maxH - curH);
- return maxH;
- }
- void solve() {
- Random rnd = new Random(123);
- for (int it = 0; it < 50; it++) {
- int n = 30_000;
- Dsu dsu = new Dsu(n);
- ArrayList<Integer>[] g = new ArrayList[n];
- for (int i = 0; i < n; i++) {
- g[i] = new ArrayList<>();
- }
- for (int iter = 0; iter < n - 1; iter++) {
- int x = rnd.nextInt(n);
- int y = rnd.nextInt(n);
- if (dsu.get(x) != dsu.get(y)) {
- g[x].add(y);
- g[y].add(x);
- dsu.unite(x, y);
- } else {
- iter--;
- }
- }
- sum = 0;
- go(0, 0, 1, g);
- System.err.println("avarage = " + sum / n);
- }
- }
- void run() {
- try {
- in = new FastScanner(new File("tree.in"));
- out = new PrintWriter(new File("tree.out"));
- solve();
- out.close();
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- }
- }
- void runIO() {
- in = new FastScanner(System.in);
- out = new PrintWriter(System.out);
- solve();
- out.close();
- }
- class FastScanner {
- BufferedReader br;
- StringTokenizer st;
- public FastScanner(File f) {
- try {
- br = new BufferedReader(new FileReader(f));
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- }
- }
- public FastScanner(InputStream f) {
- br = new BufferedReader(new InputStreamReader(f));
- }
- String next() {
- while (st == null || !st.hasMoreTokens()) {
- String s = null;
- try {
- s = br.readLine();
- } catch (IOException e) {
- e.printStackTrace();
- }
- if (s == null)
- return null;
- st = new StringTokenizer(s);
- }
- return st.nextToken();
- }
- boolean hasMoreTokens() {
- while (st == null || !st.hasMoreTokens()) {
- String s = null;
- try {
- s = br.readLine();
- } catch (IOException e) {
- e.printStackTrace();
- }
- if (s == null)
- return false;
- st = new StringTokenizer(s);
- }
- return true;
- }
- int nextInt() {
- return Integer.parseInt(next());
- }
- long nextLong() {
- return Long.parseLong(next());
- }
- double nextDouble() {
- return Double.parseDouble(next());
- }
- }
- public static void main(String[] args) {
- new Tree().runIO();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement