A 小红的图

简单判断

一共会输入四种方案

对应输出四种方案

B 小红的菊花

只有一个中心点

其他的点会跟这个点相连

所以记录每个点连接次数

大于两次的点就是我们要找的点

C 小红的好矩阵

这种矩形无非两种情况

如果是第一种情况 那么由于矩形的高是 2 则会牺牲一行 行数的贡献-1

而底是 1 不会牺牲 列全部能贡献

结果就是(n-1)*m

相反第二种 结果是(m-1)*n

D 小红嫁接

要把树变成链

第一个想到那说明叶子节点只能有两个

如何让叶子节点只有两个呢

重要是 我们移动是一个链 类似于红心接龙 在上游的叶子节点进行操作 下游的叶子节点都会变动

如果要是动态去处理 其实还是很复杂

这边我想了很久 也 wa 了几次 最后画了几个链表 发现链表的每个节点最多只能连两个节点

那我们完全可以拿到邻接矩阵

如果一个点有两个以上的邻点 就断开 接到叶子节点上

E 小红玩马

发现 1:马一旦出发 就不能以任意奇数次点步数再回到原点

发现 2:如果马到达一点的步数是奇数 那么它则不可能再以总次数为偶数次到达这个点

发现 3:马到达一个点的总步数只能是奇数次或偶数次

发现 4:马可以到达一个点使用 1 3 5 7 次或 100 102 104 105 次...

我们可以想到 先用 bfs 计算出马到一个点所需使用的最小步数

剩下如果还需要多余的步数

就可以通过在终点和任何一个合法点之间反复横跳来实现

如果 min<k 则无法到达

反复横跳需要的是偶数次步数 则需满足 (k-min)%2==0

这里有一个坑

如果起点是 (1,1)终点(1,1)

那么我们可以通过反复横跳到合法点 去消耗掉多余的步数

我们可以在一开始就消耗掉多余的点 或者在抵达终点后消耗

A 代码

// https://github.com/Dddddduo/acm-java-algorithm
import java.util.*;
import java.io.*;
import java.math.*;
import java.lang.*;

// 多多世界第一可爱!
public class Main {

    static IoScanner sc = new IoScanner();
//    static final int mod = (int) (1e9 + 7);
//    static final int mod = (int) (998244353);

    static int n;
    static int arr[];
    static boolean visited[];
    static ArrayList<ArrayList<Integer>> adj = new ArrayList<>();

    private static void solve() throws IOException {

        int l=sc.nextInt();
        int r=sc.nextInt();

        if(l==1 && r==1){
            sc.println("LU");
        }else if(l==1 && r==2){
            sc.println("LD");
        }else if(l==2 && r==1){
            sc.println("RU");
        }else if(l==2 && r==2){
            sc.println("RD");
        }

    }

    public static void main(String[] args) throws Exception {
        int t = 1;
//        t = sc.nextInt();
        while (t-- > 0) {
            solve();
        }
        sc.flush();
        sc.bw.close();
    }

}

class IoScanner {
    BufferedReader bf;
    StringTokenizer st;
    BufferedWriter bw;

    public IoScanner() {
        bf = new BufferedReader(new InputStreamReader(System.in));
        st = new StringTokenizer("");
        bw = new BufferedWriter(new OutputStreamWriter(System.out));
    }

    public String nextLine() throws IOException {
        return bf.readLine();
    }

    public String next() throws IOException {
        while (!st.hasMoreTokens()) {
            st = new StringTokenizer(bf.readLine());
        }
        return st.nextToken();
    }

    public char nextChar() throws IOException {
        return next().charAt(0);
    }

    public int nextInt() throws IOException {
        return Integer.parseInt(next());
    }

    public long nextLong() throws IOException {
        return Long.parseLong(next());
    }

    public double nextDouble() throws IOException {
        return Double.parseDouble(next());
    }

    public float nextFloat() throws IOException {
        return Float.parseFloat(next());
    }

    public BigInteger nextBigInteger() throws IOException {
        return new BigInteger(next());
    }

    public BigDecimal nextDecimal() throws IOException {
        return new BigDecimal(next());
    }

    public void println(int a) throws IOException{
        print(a);
        println();
    }

    public void print(int a) throws IOException{
        bw.write(String.valueOf(a));
    }

    public void println(String a) throws IOException{
        print(a);
        println();
    }

    public void print(String a) throws IOException{
        bw.write(a);
    }

    public void println(long a) throws IOException{
        print(a);
        println();
    }

    public void print(long a) throws IOException{
        bw.write(String.valueOf(a));
    }

    public void println(double a) throws IOException{
        print(a);
        println();
    }

    public void print(double a) throws IOException{
        bw.write(String.valueOf(a));
    }

    public void print(BigInteger a) throws IOException{
        bw.write(a.toString());
    }

    public void println(BigInteger a) throws IOException{
        bw.write(a.toString());
        println();
    }

    public void print(char a) throws IOException{
        bw.write(String.valueOf(a));
    }

    public void println(char a) throws IOException{
        print(a);
        println();
    }

    public void println() throws IOException{
        bw.newLine();
    }

    //其他调试命令:
    public void flush() throws IOException{
        //交互题分组调试,或者提前退出的情况下可以先运行此语句再推出
        bw.flush();
        return;
    }

    public boolean hasNext() throws IOException{
        //本地普通IDE难以使用这个方法调试,需要按照数据组flush,刷新语句:
        //sc.flush()
        //调试完可删去
        return bf.ready();
    }

}

B 代码

// https://github.com/Dddddduo/acm-java-algorithm
import java.util.*;
import java.io.*;
import java.math.*;
import java.lang.*;

// 多多世界第一可爱!
public class Main {

    static IoScanner sc = new IoScanner();
//    static final int mod = (int) (1e9 + 7);
//    static final int mod = (int) (998244353);

    static int n;
    static int arr[];
    static boolean visited[];
    static ArrayList<ArrayList<Integer>> adj = new ArrayList<>();

    private static void solve() throws IOException {

        int n = sc.nextInt();
        int arr[]=new int[n+5];

        for (int i = 0; i < n - 1; i++) {
            int u = sc.nextInt();
            int v = sc.nextInt();
            arr[u]++;
            arr[v]++;
        }

        int index=-1;

        for (int i = 0; i < n+5; i++) {
            if(arr[i]>1){
                index=i;
                break;
            }
        }

        sc.println(index);
    }

    public static void main(String[] args) throws Exception {
        int t = 1;
//        t = sc.nextInt();
        while (t-- > 0) {
            solve();
        }
        sc.flush();
        sc.bw.close();
    }

}

class IoScanner {
    BufferedReader bf;
    StringTokenizer st;
    BufferedWriter bw;

    public IoScanner() {
        bf = new BufferedReader(new InputStreamReader(System.in));
        st = new StringTokenizer("");
        bw = new BufferedWriter(new OutputStreamWriter(System.out));
    }

    public String nextLine() throws IOException {
        return bf.readLine();
    }

    public String next() throws IOException {
        while (!st.hasMoreTokens()) {
            st = new StringTokenizer(bf.readLine());
        }
        return st.nextToken();
    }

    public char nextChar() throws IOException {
        return next().charAt(0);
    }

    public int nextInt() throws IOException {
        return Integer.parseInt(next());
    }

    public long nextLong() throws IOException {
        return Long.parseLong(next());
    }

    public double nextDouble() throws IOException {
        return Double.parseDouble(next());
    }

    public float nextFloat() throws IOException {
        return Float.parseFloat(next());
    }

    public BigInteger nextBigInteger() throws IOException {
        return new BigInteger(next());
    }

    public BigDecimal nextDecimal() throws IOException {
        return new BigDecimal(next());
    }

    public void println(int a) throws IOException{
        print(a);
        println();
    }

    public void print(int a) throws IOException{
        bw.write(String.valueOf(a));
    }

    public void println(String a) throws IOException{
        print(a);
        println();
    }

    public void print(String a) throws IOException{
        bw.write(a);
    }

    public void println(long a) throws IOException{
        print(a);
        println();
    }

    public void print(long a) throws IOException{
        bw.write(String.valueOf(a));
    }

    public void println(double a) throws IOException{
        print(a);
        println();
    }

    public void print(double a) throws IOException{
        bw.write(String.valueOf(a));
    }

    public void print(BigInteger a) throws IOException{
        bw.write(a.toString());
    }

    public void println(BigInteger a) throws IOException{
        bw.write(a.toString());
        println();
    }

    public void print(char a) throws IOException{
        bw.write(String.valueOf(a));
    }

    public void println(char a) throws IOException{
        print(a);
        println();
    }

    public void println() throws IOException{
        bw.newLine();
    }

    //其他调试命令:
    public void flush() throws IOException{
        //交互题分组调试,或者提前退出的情况下可以先运行此语句再推出
        bw.flush();
        return;
    }

    public boolean hasNext() throws IOException{
        //本地普通IDE难以使用这个方法调试,需要按照数据组flush,刷新语句:
        //sc.flush()
        //调试完可删去
        return bf.ready();
    }

}

C 代码

// https://github.com/Dddddduo/acm-java-algorithm
import java.util.*;
import java.io.*;
import java.math.*;
import java.lang.*;

// 多多世界第一可爱!
public class Main {

    static IoScanner sc = new IoScanner();
//    static final int mod = (int) (1e9 + 7);
//    static final int mod = (int) (998244353);

    static int n;
    static int arr[];
    static boolean visited[];
    static ArrayList<ArrayList<Integer>> adj = new ArrayList<>();

    private static void solve() throws IOException {

        long n = sc.nextLong();
        long m = sc.nextLong();

        sc.println(n*(m-1)+(n-1)*m);


    }

    public static void main(String[] args) throws Exception {
        int t = 1;
//        t = sc.nextInt();
        while (t-- > 0) {
            solve();
        }
        sc.flush();
        sc.bw.close();
    }

}

class IoScanner {
    BufferedReader bf;
    StringTokenizer st;
    BufferedWriter bw;

    public IoScanner() {
        bf = new BufferedReader(new InputStreamReader(System.in));
        st = new StringTokenizer("");
        bw = new BufferedWriter(new OutputStreamWriter(System.out));
    }

    public String nextLine() throws IOException {
        return bf.readLine();
    }

    public String next() throws IOException {
        while (!st.hasMoreTokens()) {
            st = new StringTokenizer(bf.readLine());
        }
        return st.nextToken();
    }

    public char nextChar() throws IOException {
        return next().charAt(0);
    }

    public int nextInt() throws IOException {
        return Integer.parseInt(next());
    }

    public long nextLong() throws IOException {
        return Long.parseLong(next());
    }

    public double nextDouble() throws IOException {
        return Double.parseDouble(next());
    }

    public float nextFloat() throws IOException {
        return Float.parseFloat(next());
    }

    public BigInteger nextBigInteger() throws IOException {
        return new BigInteger(next());
    }

    public BigDecimal nextDecimal() throws IOException {
        return new BigDecimal(next());
    }

    public void println(int a) throws IOException{
        print(a);
        println();
    }

    public void print(int a) throws IOException{
        bw.write(String.valueOf(a));
    }

    public void println(String a) throws IOException{
        print(a);
        println();
    }

    public void print(String a) throws IOException{
        bw.write(a);
    }

    public void println(long a) throws IOException{
        print(a);
        println();
    }

    public void print(long a) throws IOException{
        bw.write(String.valueOf(a));
    }

    public void println(double a) throws IOException{
        print(a);
        println();
    }

    public void print(double a) throws IOException{
        bw.write(String.valueOf(a));
    }

    public void print(BigInteger a) throws IOException{
        bw.write(a.toString());
    }

    public void println(BigInteger a) throws IOException{
        bw.write(a.toString());
        println();
    }

    public void print(char a) throws IOException{
        bw.write(String.valueOf(a));
    }

    public void println(char a) throws IOException{
        print(a);
        println();
    }

    public void println() throws IOException{
        bw.newLine();
    }

    //其他调试命令:
    public void flush() throws IOException{
        //交互题分组调试,或者提前退出的情况下可以先运行此语句再推出
        bw.flush();
        return;
    }

    public boolean hasNext() throws IOException{
        //本地普通IDE难以使用这个方法调试,需要按照数据组flush,刷新语句:
        //sc.flush()
        //调试完可删去
        return bf.ready();
    }

}

D 代码

// https://github.com/Dddddduo/acm-java-algorithm
import java.util.*;
import java.io.*;
import java.math.*;
import java.lang.*;

// 多多世界第一可爱!
public class Main {

    static IoScanner sc = new IoScanner();
//    static final int mod = (int) (1e9 + 7);
//    static final int mod = (int) (998244353);

    static int n;
    static int arr[];
    static boolean visited[];
    static ArrayList<ArrayList<Integer>> adj ;
    static int[] degree;

    private static void solve() throws IOException {

        n = sc.nextInt();
        adj= new ArrayList<>();
        arr = new int[n+5];
        visited = new boolean[n+5];

        for (int i = 0; i < n+5; i++) {
            adj.add(new ArrayList<>());
        }

        for (int i = 0; i < n-1; i++) {
            int u=sc.nextInt();
            int v=sc.nextInt();
            adj.get(u).add(v);
            adj.get(v).add(u);
        }

        long count=0;
        for (ArrayList<Integer> integers : adj) {
            count+=Math.max(0,integers.size()-2);
        }

        sc.println(count);

    }

    public static void main(String[] args) throws Exception {
        int t = 1;
//        t = sc.nextInt();
        while (t-- > 0) {
            solve();
        }
        sc.flush();
        sc.bw.close();
    }

}

class IoScanner {
    BufferedReader bf;
    StringTokenizer st;
    BufferedWriter bw;

    public IoScanner() {
        bf = new BufferedReader(new InputStreamReader(System.in));
        st = new StringTokenizer("");
        bw = new BufferedWriter(new OutputStreamWriter(System.out));
    }

    public String nextLine() throws IOException {
        return bf.readLine();
    }

    public String next() throws IOException {
        while (!st.hasMoreTokens()) {
            st = new StringTokenizer(bf.readLine());
        }
        return st.nextToken();
    }

    public char nextChar() throws IOException {
        return next().charAt(0);
    }

    public int nextInt() throws IOException {
        return Integer.parseInt(next());
    }

    public long nextLong() throws IOException {
        return Long.parseLong(next());
    }

    public double nextDouble() throws IOException {
        return Double.parseDouble(next());
    }

    public float nextFloat() throws IOException {
        return Float.parseFloat(next());
    }

    public BigInteger nextBigInteger() throws IOException {
        return new BigInteger(next());
    }

    public BigDecimal nextDecimal() throws IOException {
        return new BigDecimal(next());
    }

    public void println(int a) throws IOException{
        print(a);
        println();
    }

    public void print(int a) throws IOException{
        bw.write(String.valueOf(a));
    }

    public void println(String a) throws IOException{
        print(a);
        println();
    }

    public void print(String a) throws IOException{
        bw.write(a);
    }

    public void println(long a) throws IOException{
        print(a);
        println();
    }

    public void print(long a) throws IOException{
        bw.write(String.valueOf(a));
    }

    public void println(double a) throws IOException{
        print(a);
        println();
    }

    public void print(double a) throws IOException{
        bw.write(String.valueOf(a));
    }

    public void print(BigInteger a) throws IOException{
        bw.write(a.toString());
    }

    public void println(BigInteger a) throws IOException{
        bw.write(a.toString());
        println();
    }

    public void print(char a) throws IOException{
        bw.write(String.valueOf(a));
    }

    public void println(char a) throws IOException{
        print(a);
        println();
    }

    public void println() throws IOException{
        bw.newLine();
    }

    //其他调试命令:
    public void flush() throws IOException{
        //交互题分组调试,或者提前退出的情况下可以先运行此语句再推出
        bw.flush();
        return;
    }

    public boolean hasNext() throws IOException{
        //本地普通IDE难以使用这个方法调试,需要按照数据组flush,刷新语句:
        //sc.flush()
        //调试完可删去
        return bf.ready();
    }

}

E 代码

// https://github.com/Dddddduo/acm-java-algorithm

import java.util.*;
import java.io.*;
import java.math.*;
import java.lang.*;

// 多多世界第一可爱!
public class Main {

    static IoScanner sc = new IoScanner();
//    static final int mod = (int) (1e9 + 7);
//    static final int mod = (int) (998244353);


    static class Pair {
        int x, y;
        // 前一个节点
        Pair prev;

        Pair(int x, int y, Pair prev) {
            this.x = x;
            this.y = y;
            this.prev = prev;
        }
    }

    static int n;
    static int m;
    static int end_x;
    static int end_y;

    public static void solve() throws Exception {

        n = sc.nextInt();
        m = sc.nextInt();

        int k = sc.nextInt();

        int start_x = sc.nextInt();
        int start_y = sc.nextInt();

        end_x = sc.nextInt();
        end_y = sc.nextInt();

        Pair end = bfs(start_x, start_y);

        if (end == null) {
            System.out.println("No");
            return;
        }

        List<Pair> path = new ArrayList<>();
        Pair curr = end;
        while (curr != null) {
            path.add(curr);
            curr = curr.prev;
        }

        Collections.reverse(path);

        int d = path.size() - 1;

        List<Pair> result = new ArrayList<>();
        for (int i = 1; i < path.size(); i++) {
            result.add(path.get(i));
        }

        // 结果需要k次 最短路径是d次
        int num = k - d;

        if(d==0){
//            System.out.println(k);
            if(k%2!=0){
                sc.println("No");
                return;
            }
            List<Pair> nearOne = getNearOne(start_x, start_y, n, m);
            if(nearOne==null||nearOne.size()==0){
                sc.println("No");
                return;
            }
            ArrayList<Pair> ans = new ArrayList<>();
            for (int i = 0; i < k / 2; i++) {
                ans.add(nearOne.get(0));
                ans.add(new Pair(start_x,start_y,null));
            }
            sc.println("Yes");
            for (Pair p : ans) {
                sc.println(p.x + " " + p.y);
            }
            return;
        }

        if (num == 0) {
            sc.println("Yes");
            for (Pair p : result) {
                sc.println(p.x + " " + p.y);
            }
        } else if (num < 0) {
            sc.println("No");
        } else if (num > 0) {
            if (num % 2 != 0) {
                sc.println("No");
                return;
            }

            if(result.size()<=3){
                sc.println("No");
                return;
            }

            ArrayList<Pair> ans = new ArrayList<>();

            ans.add(path.get(1));
            ans.add(path.get(2));

            for (int i = 0; i < num / 2; i++) {
                ans.add(path.get(1));
                ans.add(path.get(2));
            }

            for (int i = 3; i < path.size(); i++) {
                ans.add(path.get(i));
            }

            sc.println("Yes");
            for (Pair p : ans) {
                sc.println(p.x + " " + p.y);
            }

        }

    }

    // 马的行动路径
    static int[] dx = {2, 1, -1, -2, -2, -1, 1, 2};
    static int[] dy = {1, 2, 2, 1, -1, -2, -2, -1};

    private static Pair bfs(int x1, int y1) {

        boolean[][] visited = new boolean[n + 5][m + 5];

        // 已经访问过了
        visited[x1][y1] = true;

        Queue<Pair> queue = new LinkedList<>();

        queue.add(new Pair(x1, y1, null));

        while (!queue.isEmpty()) {
            Pair curr = queue.poll();
//            sc.println(curr.x + " " + curr.y);
            // 到达终点
            if (curr.x == end_x && curr.y == end_y) {
                return curr;
            }
            for (int i = 0; i < 8; i++) {
                int nx = curr.x + dx[i];
                int ny = curr.y + dy[i];
                if (judge(nx, ny, n, m) && !visited[nx][ny]) {
                    visited[nx][ny] = true;
                    queue.add(new Pair(nx, ny, curr));
                }
            }
        }
        return null;
    }

    // 判断点的合法性
    static boolean judge(int x, int y, int n, int m) {
        if (x < 1 || x > n || y < 1 || y > m) {
            return false;
        } else {
            return true;
        }
    }

    // 获得这个点可以通过一步到达的地方
    static List<Pair> getNearOne(int x, int y, int n, int m) {
        List<Pair> list = new ArrayList<>();
        for (int i = 0; i < 8; i++) {
            int nx = x + dx[i];
            int ny = y + dy[i];
            if (judge(nx, ny, n, m)) {
                list.add(new Pair(nx, ny, null));
            }
        }
        return list;
    }

    // 判断当前点是否在路径上
    private static boolean isInPath(Pair p, List<Pair> path) {
        for (Pair pp : path) {
            if (pp.x == p.x && pp.y == p.y) {
                return true;
            }
        }
        return false;
    }

    public static void main(String[] args) throws Exception {
        int t = 1;
//        t = sc.nextInt();
        while (t-- > 0) {
            solve();
        }
        sc.flush();
        sc.bw.close();
    }

}

class IoScanner {
    BufferedReader bf;
    StringTokenizer st;
    BufferedWriter bw;

    public IoScanner() {
        bf = new BufferedReader(new InputStreamReader(System.in));
        st = new StringTokenizer("");
        bw = new BufferedWriter(new OutputStreamWriter(System.out));
    }

    public String nextLine() throws IOException {
        return bf.readLine();
    }

    public String next() throws IOException {
        while (!st.hasMoreTokens()) {
            st = new StringTokenizer(bf.readLine());
        }
        return st.nextToken();
    }

    public char nextChar() throws IOException {
        return next().charAt(0);
    }

    public int nextInt() throws IOException {
        return Integer.parseInt(next());
    }

    public long nextLong() throws IOException {
        return Long.parseLong(next());
    }

    public double nextDouble() throws IOException {
        return Double.parseDouble(next());
    }

    public float nextFloat() throws IOException {
        return Float.parseFloat(next());
    }

    public BigInteger nextBigInteger() throws IOException {
        return new BigInteger(next());
    }

    public BigDecimal nextDecimal() throws IOException {
        return new BigDecimal(next());
    }

    public void println(int a) throws IOException {
        print(a);
        println();
    }

    public void print(int a) throws IOException {
        bw.write(String.valueOf(a));
    }

    public void println(String a) throws IOException {
        print(a);
        println();
    }

    public void print(String a) throws IOException {
        bw.write(a);
    }

    public void println(long a) throws IOException {
        print(a);
        println();
    }

    public void print(long a) throws IOException {
        bw.write(String.valueOf(a));
    }

    public void println(double a) throws IOException {
        print(a);
        println();
    }

    public void print(double a) throws IOException {
        bw.write(String.valueOf(a));
    }

    public void print(BigInteger a) throws IOException {
        bw.write(a.toString());
    }

    public void println(BigInteger a) throws IOException {
        bw.write(a.toString());
        println();
    }

    public void print(char a) throws IOException {
        bw.write(String.valueOf(a));
    }

    public void println(char a) throws IOException {
        print(a);
        println();
    }

    public void println() throws IOException {
        bw.newLine();
    }

    //其他调试命令:
    public void flush() throws IOException {
        //交互题分组调试,或者提前退出的情况下可以先运行此语句再推出
        bw.flush();
        return;
    }

    public boolean hasNext() throws IOException {
        //本地普通IDE难以使用这个方法调试,需要按照数据组flush,刷新语句:
        //sc.flush()
        //调试完可删去
        return bf.ready();
    }

}