Skip to content

Instantly share code, notes, and snippets.

@chermehdi
Created September 28, 2018 14:28
Show Gist options
  • Select an option

  • Save chermehdi/685d0a18fa033b0577197c503f76075b to your computer and use it in GitHub Desktop.

Select an option

Save chermehdi/685d0a18fa033b0577197c503f76075b to your computer and use it in GitHub Desktop.
DeadMen no Tales
import java.io.OutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.List;
import java.util.InputMismatchException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
/**
* Built using CHelper plug-in Actual solution is at the top
*
* @author MaxHeap
*/
public class Main {
public static void main(String[] args) {
InputStream inputStream = System.in;
OutputStream outputStream = System.out;
InputReader in = new InputReader(inputStream);
PrintWriter out = new PrintWriter(outputStream);
DeadMenNotTales2 solver = new DeadMenNotTales2();
solver.solve(1, in, out);
out.close();
}
static class DeadMenNotTales2 {
List<Integer>[] g;
int n;
int m;
long[] sum;
long[] count;
void dfs(int u, int p) {
count[u] = 1;
for (int v : g[u]) {
if (v != p) {
dfs(v, u);
sum[u] += sum[v] + count[v];
count[u] += count[v];
}
}
}
void rec(int u, int p) {
if (p != 0) {
sum[u] = sum[p] + (count[p] - 2 * count[u]);
count[u] = count[p];
}
for (int v : g[u]) {
if (v != p) {
rec(v, u);
}
}
}
public void solve(int testNumber, InputReader in, PrintWriter out) {
n = in.nextInt();
m = in.nextInt();
sum = new long[n + 1];
count = new long[n + 1];
g = GraphUtils.generateGraph(n + 1);
for (int i = 0; i < n - 1; i++) {
int u = in.nextInt();
int v = in.nextInt();
g[u].add(v);
g[v].add(u);
}
dfs(1, 0);
rec(1, 0);
long ans = ArrayUtils.sum(sum);
out.println(ans / 2L);
}
}
static class GraphUtils {
private GraphUtils() {
}
public static List<Integer>[] generateGraph(int n) {
List<Integer>[] graph = new ArrayList[n];
for (int i = 0; i < n; i++) {
graph[i] = new ArrayList<>();
}
return graph;
}
}
static class ArrayUtils {
public static long sum(long[] arr) {
long ret = 0;
for (int i = 0; i < arr.length; i++) {
ret += arr[i];
}
return ret;
}
}
static class InputReader {
private InputStream stream;
private byte[] buf = new byte[1 << 13];
private int curChar;
private int numChars;
public InputReader(InputStream stream) {
this.stream = stream;
}
public int read() {
if (this.numChars == -1) {
throw new UnknownError();
} else {
if (this.curChar >= this.numChars) {
this.curChar = 0;
try {
this.numChars = this.stream.read(this.buf);
} catch (IOException ex) {
throw new InputMismatchException();
}
if (this.numChars <= 0) {
return -1;
}
}
return this.buf[this.curChar++];
}
}
public int nextInt() {
int c;
for (c = this.read(); isSpaceChar(c); c = this.read()) {
}
byte sgn = 1;
if (c == 45) {
sgn = -1;
c = this.read();
}
int res = 0;
while (c >= 48 && c <= 57) {
res *= 10;
res += c - 48;
c = this.read();
if (isSpaceChar(c)) {
return res * sgn;
}
}
throw new InputMismatchException();
}
public static boolean isSpaceChar(int c) {
return c == 32 || c == 10 || c == 13 || c == 9 || c == -1;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment