图论练习1

news2024/11/14 1:53:53

内容:Tuopu,拆点,分层,Bitset传递,带限制的最小生成树


[HNOI2015]菜肴制作

题目链接

题目大意 

  • m个限制,x号菜肴在y号前完成
  • 在满足限制的条件下,按照1\cdots 2\cdots 3\cdots出菜( 1\cdots 2是为了满足2的限制 )

解题思路

  • 由限制,可以考虑Tuopu
  • 若直接正向Tuopu,以 3\rightarrow 4\rightarrow 1 \ | \ 2 \ | \ 5 为例, 则会先出2
  • 而反向Tuopu1\rightarrow 4\rightarrow 3 \ | \ 2 \ | \ 5
  • 此时对于一路限制,最先出的最小的号
  • 题目有要求先满足较小号的限制
  • 所以将队列改为由大到小排序的堆,再倒序输出每次出堆的号
  • 排序的内容实际为正向限制路径上的最终菜肴
  • 有环则无解

import java.io.*;
import java.util.Arrays;
import java.util.PriorityQueue;
import java.util.StringTokenizer;




public class Main{
	static int cnt=0;
	static Edge[] e;
	static int[] head;
	static
	class Edge{
		long val;
		int to;
		int fr;
		int nxt;
	}
	static void addEdge(int fr,int to,long val) {
		cnt++;
		e[cnt]=new Edge();
		e[cnt].fr=fr;
		e[cnt].to=to;
		e[cnt].val=val;
		e[cnt].nxt=head[fr];
		head[fr]=cnt;
	}
	
	static
	class Node{
		int x;
		long dis;
		public Node() {}
		public Node(int I,long D) {
			x=I;;
			dis=D;
		}
	}
	
	public static void main(String[] args) throws IOException{
		AReader input=new AReader();
	    PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
	    int T=input.nextInt();
	    while(true) {
	    	if(T==0) break;
	    	int n=input.nextInt();
		    int m=input.nextInt();
		    e=new Edge[m+1];
		    head=new int[n+1];
		    cnt=0;
		    int[] in=new int[n+1];
		    for(int i=1;i<=m;++i) {
		    	int u=input.nextInt();
		    	int v=input.nextInt();
		    	in[u]++;
		    	addEdge(v, u, 0);
		    }
		    PriorityQueue<Integer> qu=new PriorityQueue<Integer>((o1,o2)-> {return o2-o1;});
		    boolean[] vis=new boolean[n+1];
		    for(int i=1;i<=n;++i) {
		    	if(in[i]==0) {
		    		qu.add(i);
		    		vis[i]=true;
		    	}
		    }
		    int[] op=new int[n+1];
		    int cnt=0;
		    while(!qu.isEmpty()) {
		    	int x=qu.peek();
		    	qu.poll();
		    	cnt++;
		    	op[cnt]=x;
		    	for(int i=head[x];i>0;i=e[i].nxt) {
		    		int v=e[i].to;
		    		if(vis[v])continue;
		    		in[v]--;
		    		if(in[v]==0) {
		    			qu.add(v);
		    			vis[v]=true;
		    		}
		    	}
		    }
		    if(cnt!=n) {
		    	out.println("Impossible!");
		    }else {
		    	for(int i=cnt;i>0;--i) {
		    		out.print(op[i]+" ");
		    	}
		    	out.println();
		    }
	    	T--;
	    }
	    out.flush();
	    out.close();
	}
	
	static
    class AReader {
        private BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        private StringTokenizer tokenizer = new StringTokenizer("");
        private String innerNextLine() {
            try {
                return reader.readLine();
            } catch (IOException ex) {
                return null;
            }
        }
        public boolean hasNext() {
            while (!tokenizer.hasMoreTokens()) {
                String nextLine = innerNextLine();
                if (nextLine == null) {
                    return false;
                }
                tokenizer = new StringTokenizer(nextLine);
            }
            return true;
        }
        public String nextLine() {
            tokenizer = new StringTokenizer("");
            return innerNextLine();
        }
        public String next() {
            hasNext();
            return tokenizer.nextToken();
        }
        public int nextInt() {
            return Integer.parseInt(next());
        }
 
        public long nextLong() {
            return Long.parseLong(next());
        }
 
    }
}


胖胖的牛牛

题目链接

题目大意

  • 在图上从AB"x"不可经过,有水平和垂直两个方向
  • x且方向为垂直,往左或右走,需要转变方向
  • A\rightarrow B最少的转变方向次数

解题思路

  • x\rightarrow y,看作两步,先判断转向,再移动
  • 所以将一个点拆为上下左右4个,(u,v,l,r)
  • \left\{\begin{matrix} u\overset{0}\leftrightharpoons v\\ l\overset{0}\leftrightharpoons r\\ l\overset{1}\leftrightharpoons u\\ u\overset{1}\leftrightharpoons r\\ r\overset{1}\leftrightharpoons v\\ v\overset{1}\leftrightharpoons l \end{matrix}\right.\left\{\begin{matrix} nxtr\overset{0}\leftrightharpoons l \\ r\overset{0}\leftrightharpoons nxtl & \\ nxtv\overset{0}\leftrightharpoons u & \\ v\overset{0}\leftrightharpoons nxtu& \end{matrix}\right.\left\{\begin{matrix} num=(i-1)*n+j\\ l=num*4\\ u=l+1\\ r=l+2\\ v=l+3 \end{matrix}\right.
  • 求拆点后,A\rightarrow B的最短路

import java.io.*;
import java.io.ObjectInputStream.GetField;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.StringTokenizer;
import java.util.Vector;



public class Main{
	static int inf=Integer.MAX_VALUE/2;
	static
	class Edge{
		int fr,to,nxt;
		int val;
		public Edge(int u,int v,int w) {
			fr=u;
			to=v;
			val=w;
		}
	}
	static
	class Node{
		int x,y;
		public Node(int X,int Y) {
			x=X;
			y=Y;
		}
	}
	static 
	class Map{
		int[] head;
		int cnt;
		Edge[] e;
		int ans=inf;
		public Map(int n,int m) {
			e=new Edge[m];
			head=new int[n+1];
			cnt=0;
		}
		void addEdge(int fr,int to,int val) {
			cnt++;
			e[cnt]=new Edge(fr, to, val);
			e[cnt].nxt=head[fr];
			head[fr]=cnt;
		}
		void Dij(int s,int n,int[] t) {
			int[] dis=new int[n+1];
			boolean[] vis=new boolean[n+1];
			PriorityQueue<Node> q=new PriorityQueue<Node>((o1,o2)->{return o1.y-o2.y;});
			for(int i=1;i<=n;++i)dis[i]=inf;
			dis[s]=0;
			q.add(new Node(s, 0));
			while(!q.isEmpty()) {
				Node now=q.peek();
				q.poll();
				int x=now.x;
				if(vis[x])continue;
				int disu=now.y;
				for(int i=head[x];i>0;i=e[i].nxt) {
					int v=e[i].to;
					int w=e[i].val;
					if(vis[v])continue;
					if(dis[v]>disu+w) {
						dis[v]=disu+w;
						q.add(new Node(v,dis[v]));
					}
				}
			}
			
			ans=Math.min(ans, Math.min(dis[t[0]], dis[t[1]]));
		}
	}
	public static void main(String[] args) throws IOException{
		AReader input=new AReader();
	    PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
	    int n=input.nextInt();
	    char[][] map=new char[n+1][n+1];
	    for(int i=1;i<=n;++i) {
	    	for(int j=1;j<=n;++j)map[i][j]=input.nextChar();
	    }
	    int N=4*n*n;
	    Map T=new Map(N, 200000);
	    int[] s=new int[2];
	    int[] t=new int[2];
	    for(int i=1;i<=n;++i) {
	    	for(int j=1;j<=n;++j) {
	    		if(map[i][j]=='x')continue;
	    		int num=(i-1)*n+j;
    			int l=(num-1)*4;
    			int u=l+1;
    			int r=l+2;
    			int v=l+3;
    			T.addEdge(l, u, 1);
    			T.addEdge(u, l, 1);
    			T.addEdge(u, r, 1);
    			T.addEdge(r, u, 1);
    			T.addEdge(r, v, 1);
    			T.addEdge(v, r, 1);
    			T.addEdge(v, l, 1);
    			T.addEdge(l, v, 1);
    			T.addEdge(l, r, 0);
    			T.addEdge(r, l, 0);
    			T.addEdge(u, v, 0);
    			T.addEdge(v, u, 0);
    			if(j+1<=n&&map[i][j+1]!='x') {
    				int nxtl=num*4;
    				T.addEdge(r, nxtl, 0);
    				T.addEdge(nxtl, r, 0);
    			}
    			if(j>=2&&map[i][j-1]!='x') {
    				int nxtr=(num-2)*4+2;
    				T.addEdge(nxtr, l, 0);
    				T.addEdge(l, nxtr, 0);
    			}
    			if(i>=2&&map[i-1][j]!='x') {
    				int nxtv=((i-2)*n+j-1)*4+3;
    				T.addEdge(u, nxtv, 0);
    				T.addEdge(nxtv, u, 0);
    			}
    			if(i+1<=n&&map[i+1][j]!='x') {
    				int nxtu=(i*n+j-1)*4+1;
    				T.addEdge(nxtu, v, 0);
    				T.addEdge(v, nxtu, 0);	
    			}	
	    		if(map[i][j]=='A') {
	    			s[0]=l;
	    			s[1]=u;
	    			
	    		}else if(map[i][j]=='B') {
	    			t[0]=l;
	    			t[1]=u;
	    			
	    		}
	    		
	    	}
	    }
	    T.Dij(s[0], N, t);
	    T.Dij(s[1], N, t);
	    if(T.ans==inf)out.print("-1");
	    else out.print(T.ans);
 	    out.flush();
	    out.close();
	}
	static
	class AReader{
	    BufferedReader bf;
	    StringTokenizer st;
	    BufferedWriter bw;

	    public AReader(){
	        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{
	        //确定下一个token只有一个字符的时候再用
	        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 byte nextByte() throws IOException{
	        return Byte.parseByte(next());
	    }
	    public short nextShort() throws IOException{
	        return Short.parseShort(next());
	    }
	    public BigInteger nextBigInteger() throws IOException{
	        return new BigInteger(next());
	    }
	    public void println() throws IOException {
	        bw.newLine();
	    }
	    public void println(int[] arr) throws IOException{
	        for (int value : arr) {
	            bw.write(value + " ");
	        }
	        println();
	    }
	    public void println(int l, int r, int[] arr) throws IOException{
	        for (int i = l; i <= r; i ++) {
	            bw.write(arr[i] + " ");
	        }
	        println();
	    }
	    public void println(int a) throws IOException{
	        bw.write(String.valueOf(a));
	        bw.newLine();
	    }
	    public void print(int a) throws IOException{
	        bw.write(String.valueOf(a));
	    }
	    public void println(String a) throws IOException{
	        bw.write(a);
	        bw.newLine();
	    }
	    public void print(String a) throws IOException{
	        bw.write(a);
	    }
	    public void println(long a) throws IOException{
	        bw.write(String.valueOf(a));
	        bw.newLine();
	    }
	    public void print(long a) throws IOException{
	        bw.write(String.valueOf(a));
	    }
	    public void println(double a) throws IOException{
	        bw.write(String.valueOf(a));
	        bw.newLine();
	    }
	    public void print(double a) throws IOException{
	        bw.write(String.valueOf(a));
	    }
	    public void print(char a) throws IOException{
	        bw.write(String.valueOf(a));
	    }
	    public void println(char a) throws IOException{
	        bw.write(String.valueOf(a));
	        bw.newLine();
	    }
	}
}


UVALive7250 Meeting

题目大意 

  • n个点,m个集合,集合内的点有权为f的边
  • A1出发,Bn出发,走单位距离花费1时间,问AB相遇与一点的最少时间

解题思路 

  • 若点集合size=k,任意两点之间连f边,共连\textrm{C}_{k}^{2},当k很大存不下
  • 考虑将集合看作一点t,则集合内两点x,y连边,变为 x\overset{f/2}\leftrightarrow t\overset{f/2}\leftrightarrow y,double \ f
  • 连边降为k*2,可以存下
  • A,B 在n个点上的任意一点相遇
  • 1n为出发点,跑最短路
  • 再枚举点,求Min^n_{i=1} \ max(dis_1[i],dis_n[i])

[USACO 2007 Mar G] Ranking the cows

题目链接

 题目大意

  • n 个数字,已经比较了m
  • 问至少还需要多少对比较,可以将n个数由大到小排列

解题思路 

  • 对于x,y,z,若已知x>y,y>z,则x>z
  • n\leq 1000,类似Floyd枚举中间点
  • 定义f[i][j]表示i>j,1=true,0=false
  • f[i][j]=f[i][k]\&f[k][j],(1\&1=1)
  • 可以省去枚举jif(f[i][k])f[i]|=f[k] 
  • f[i]表示与其他点的状态,用bitset
  • f[i][j]==0\&\&f[j][i]==0,则不知道i,j大小关系,需要比较,ans++
  • 此时不知道比较后的结果,无法传递,要满足至少都得比较

import java.io.*;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.BitSet;
import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.StringTokenizer;
import java.util.Vector;



public class Main{
	
	public static void main(String[] args) throws IOException{
		AReader input=new AReader();
	    PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
	    int n=input.nextInt();
	    int m=input.nextInt();
	    BitSet[] a=new BitSet[n+1];
	    for(int i=0;i<n;++i)a[i]=new BitSet(n);
	    for(int i=1;i<=m;++i) {
	    	int x=input.nextInt()-1;
	    	int y=input.nextInt()-1;
	    	
	    	a[x].set(y);//对应位置赋为true
	    }
	    for(int k=0;k<n;++k) {
	    	for(int i=0;i<n;++i) {
	    		if(a[i].get(k)) {
	    			a[i].or(a[k]);//或运算
	    		}
	    	}
	    }
	    int ans=0;
	    for(int i=0;i<n;++i) {
	    	for(int j=i+1;j<n;++j) {
	    		if(a[i].get(j)==false&&a[j].get(i)==false) {
	    			ans++;
	    			//因为不知道是i>j还是i<j,无法传递
	    		}
	    	}
	    }
	    out.print(ans);
 	    out.flush();
	    out.close();
	}
	static
	class AReader{
	    BufferedReader bf;
	    StringTokenizer st;
	    BufferedWriter bw;

	    public AReader(){
	        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{
	        //确定下一个token只有一个字符的时候再用
	        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 byte nextByte() throws IOException{
	        return Byte.parseByte(next());
	    }
	    public short nextShort() throws IOException{
	        return Short.parseShort(next());
	    }
	    public BigInteger nextBigInteger() throws IOException{
	        return new BigInteger(next());
	    }
	    public void println() throws IOException {
	        bw.newLine();
	    }
	    public void println(int[] arr) throws IOException{
	        for (int value : arr) {
	            bw.write(value + " ");
	        }
	        println();
	    }
	    public void println(int l, int r, int[] arr) throws IOException{
	        for (int i = l; i <= r; i ++) {
	            bw.write(arr[i] + " ");
	        }
	        println();
	    }
	    public void println(int a) throws IOException{
	        bw.write(String.valueOf(a));
	        bw.newLine();
	    }
	    public void print(int a) throws IOException{
	        bw.write(String.valueOf(a));
	    }
	    public void println(String a) throws IOException{
	        bw.write(a);
	        bw.newLine();
	    }
	    public void print(String a) throws IOException{
	        bw.write(a);
	    }
	    public void println(long a) throws IOException{
	        bw.write(String.valueOf(a));
	        bw.newLine();
	    }
	    public void print(long a) throws IOException{
	        bw.write(String.valueOf(a));
	    }
	    public void println(double a) throws IOException{
	        bw.write(String.valueOf(a));
	        bw.newLine();
	    }
	    public void print(double a) throws IOException{
	        bw.write(String.valueOf(a));
	    }
	    public void print(char a) throws IOException{
	        bw.write(String.valueOf(a));
	    }
	    public void println(char a) throws IOException{
	        bw.write(String.valueOf(a));
	        bw.newLine();
	    }
	}
}


[SCOI2012]滑雪与时间胶囊

题目链接

题目大意 

  • m条边,每个边的端点为景点,共n
  •  每个点有高度H_i
  • i能到j,满足有i\rightarrow j\&\&H_i\geq H_j,边权为w
  • 从从1号景点出发,走最短路,访问尽量多的节点
  • 同时可以回到经过的任意一个节点,再次出发
  • 问最多能访问多少个节点和此时走过的最小路径长度

解题思路

  • 由于可以任意回溯,所以可以访问到1号节点能到的任意一个节点 
  • 1号节点能到的点数为k,则最终边有k-1
  • 考虑Prim生成最小树
  • 由于边有高度通行限制,所以要访问尽可能多的点,高度高的点先出,其次再比较边权
  • 每出一个点,进行答案更新
import java.io.*;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.PriorityQueue;
import java.util.StringTokenizer;




public class Main{
	static int cnt=0;
	static Edge[] e;
	static int[] head;
	static
	class Edge{
		long val;
		int to;
		int fr;
		int nxt;
	}
	static void addEdge(int fr,int to,long val) {
		cnt++;
		e[cnt]=new Edge();
		e[cnt].fr=fr;
		e[cnt].to=to;
		e[cnt].val=val;
		e[cnt].nxt=head[fr];
		head[fr]=cnt;
	}
	static
	class Node{
		int x;
        int h;
		long dis;
		public Node(){}
		public Node(int X,long D,int H){
			x=X;
            h=H;
			dis=D;
		}
	}
	
	
	public static void main(String[] args) throws IOException{
		AReader input=new AReader();
	    PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
	    int n=input.nextInt();
	    int m=input.nextInt();
	    int[] H=new int[n+1];

	    e=new Edge[m<<1|1];
	    head=new int[n+1];
	    for(int i=1;i<=n;++i) {
	    	H[i]=input.nextInt();

	    }
	    for(int i=1;i<=m;++i) {
	    	int u=input.nextInt();
	    	int v=input.nextInt();
	    	long val=input.nextLong();
	    	if(H[u]>=H[v])addEdge(u, v, val);
	    	if(H[v]>=H[u])addEdge(v, u, val);
	    }
	    boolean[] vis=new boolean[n+1];
	    PriorityQueue<Node> qu=new PriorityQueue<Node>((o1,o2)->{
	    	if(o1.h==o2.h){
                if(o1.dis-o2.dis>0)return 1;
                else if(o1.dis-o2.dis<0)return -1;
                else return 0;
            }else return o2.h-o1.h;
	    });
	    int num=0;
	    long ans=0;
	    qu.add(new Node(1,0,H[1]));
	    while(!qu.isEmpty()) {
	    	Node now=qu.peek();
            qu.poll();
	    	int x=now.x;
            if(vis[x])continue;
	    	vis[x]=true;
	    	ans+=now.dis;
	    	num++;
	    	for(int i=head[x];i>0;i=e[i].nxt) {
	    		int v=e[i].to;
	    		long w=e[i].val;
	    		if(vis[v])continue;
	    		
                qu.add(new Node(v,w,H[v]));

	    	}
	    }
	    out.println(num+" "+ans);
	    out.flush();
	    out.close();
	}
	
	static
    class AReader {
        private BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        private StringTokenizer tokenizer = new StringTokenizer("");
        private String innerNextLine() {
            try {
                return reader.readLine();
            } catch (IOException ex) {
                return null;
            }
        }
        public boolean hasNext() {
            while (!tokenizer.hasMoreTokens()) {
                String nextLine = innerNextLine();
                if (nextLine == null) {
                    return false;
                }
                tokenizer = new StringTokenizer(nextLine);
            }
            return true;
        }
        public String nextLine() {
            tokenizer = new StringTokenizer("");
            return innerNextLine();
        }
        public String next() {
            hasNext();
            return tokenizer.nextToken();
        }
        public int nextInt() {
            return Integer.parseInt(next());
        }
 
        public long nextLong() {
            return Long.parseLong(next());
        }
        public double nextDouble() {
        	return Double.parseDouble(next());
        }
    }
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1430922.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Github 2024-02-04 开源项目日报 Top9

根据Github Trendings的统计&#xff0c;今日(2024-02-04统计)共有9个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目6Ruby项目1HTML项目1C项目1Go项目1TypeScript项目1 Windows 终端、控制台和命令行存储库 创建周期…

一个 WPF + MudBlazor 的项目模板(附:多项目模板制作方法)

最近做了几个 WPF MudBlazor 的小东西&#xff0c;每次从头搭建环境比较繁琐&#xff0c;然鹅搭建过程还没啥技术含量&#xff0c;索性就直接做了个模板&#xff0c;方便以后使用。 1. 介绍 一个用来创建 .NET 8 WPF MudBlazor 的项目模板 适用于 VS2022 用法&#xff1a;…

【学习笔记】详解换根法(换根DP)

一.换根DP的概念 1.换根DP是什么&#xff1f; 换根DP&#xff0c;又叫二次扫描&#xff0c;是树形DP的一种。 2.换根DP能解决什么问题&#xff1f; 换根DP能解决不指定根结点&#xff0c;并且根节点的变化会对一些值产生影响的问题。例如子结点深度和、点权和等。如果要 暴力…

河西走廊潜在蒸散发时空格局变化与气象因素的关系_马亚丽_2023

河西走廊潜在蒸散发时空格局变化与气象因素的关系_马亚丽_2023 摘要关键词 1 数据与方法1.1 数据来源1.2 变化趋势分析1.3 定性分析方法1.3.1 主成分分析1.3.2 相关系数1.3.3 通径分析 1.4 定量分析方法1.4.1 敏感系数1.4.2 贡献率计算 2 结果与分析2.1 ET0多年变化特征2.1.1 E…

Linux下tar命令详解

tar #归档命令 格式 • Tar -参数 [args]..... 参数&#xff1a; 必选参数&#xff1a; 辅助参数&#xff1a; 额外参数&#xff1a; # 打包时排除某个文件 tar cf 文件名.tar --exclude路径/文件 路径 注&#xff1a;此处的路径前后需要保持保持一致&#xff0c;统一…

202417读书笔记|《画•大师 阿尔丰斯•穆夏》——在明亮大胆的色调中熠熠生辉

202417读书笔记|《画•大师 阿尔丰斯•穆夏》——在明亮大胆的色调中熠熠生辉 这是读完的第二本或者第三本穆夏的画集。很赞&#xff0c;他的绘画风格&#xff0c;构图&#xff0c;元素&#xff0c;取大自然的月桂树&#xff0c;常青藤&#xff0c;&#x1f319;的不同形态&…

2024PMP考试新考纲-近年真题练一练和很详细解析(1)

前面的几十篇文章中&#xff0c;华研荟主要从PMP相关的教材&#xff08;PMBOK第六版、PMBOK第七版和敏捷实践指南》出发&#xff0c;分类介绍了相关的考试真题&#xff0c;并逐一作了比较详细的解析&#xff0c;部分典型题目还做了提醒和拓展&#xff0c;帮助大家做题的时候知其…

PHP入门指南:起步篇

PHP入门指南&#xff1a;起步篇 PHP入门指南&#xff1a;起步篇什么是PHP&#xff1f;PHP 的优点PHP 开发环境搭建选择本地服务器软件包安装PHP环境配置Web服务器和PHP测试PHP安装 第一个PHP脚本PHP基础语法标记注释变量数据类型常量条件语句循环函数 PHP入门指南&#xff1a;起…

【实战知识】使用Github Action + Nginx实现自动化部署

大家好啊,我是独立开发豆小匠。 先说一下背景~ 我的小程序:豆流便签,目前使用云托管部署后端服务,使用轻量级服务器部署数据库和一些中间件。 因此服务器成本:云托管 + 云服务器 云托管每周花费5元,一个月就是50,一年就是500啊,所以这期准备把云托管优化掉! 1. 需…

docker镜像结构

# 基础镜像 FROM openjdk:11.0-jre-buster # 设定时区 ENV TZAsia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # 拷贝jar包 COPY docker-demo.jar /app.jar # 入口 ENTRYPOINT ["java", "-jar"…

IP数据云识别真实IP与虚假流量案例

随着互联网的普及&#xff0c;企业在数字领域面临着越来越复杂的网络威胁。为了保护网站免受虚假流量和恶意攻击的影响&#xff0c;许多企业正在采用IP数据云。本文将结合一个真实案例&#xff0c;深入探讨IP数据云如何成功准确地识别真实用户IP和虚假流量IP&#xff0c;提高网…

tidb节点重启后,服务无法重连

大家好&#xff0c;我是烤鸭&#xff1a; 前几天遇到tidb节点重启后服务无法重连&#xff0c;确切地说是两个服务&#xff0c;一个可以正常重连&#xff0c;一个不行。 问题复现 由于线上执行慢SQL&#xff0c;导致TiDB 单个节点宕机重启。 其中A服务的3个节点和B服务的1个节…

Nicn的刷题日常之杨氏矩阵(三种方法求解,逐级递增详解,手把手教学,建议三连收藏)

目录 1.杨氏矩阵知识普及&#xff1a;什么是样式矩阵 2.题目描述 3.解题 3.1暴力求解&#xff0c;遍历法 3.2巧妙解题&#xff1a;对角元素法 3.3将巧解法封装为函数 4.结语 1.杨氏矩阵知识普及&#xff1a;什么是样式矩阵 杨氏矩阵&#xff0c;是对组合表示理论和…

计算机网络_1.6.3 计算机网络体系结构分层思想举例

1.6.3 计算机网络体系结构分层思想举例 1、实例引入&#xff08;用户在主机中使用浏览器访问web服务器&#xff09;2、从五层原理体系结构的角度研究该实例3、练习题 笔记来源&#xff1a; B站 《深入浅出计算机网络》课程 本节通过一个常见的网络应用实例&#xff0c;来介绍计…

“type-check“ exited with 1.

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

ProcessSlot构建流程分析

ProcessorSlot ProcessorSlot构建流程 // com.alibaba.csp.sentinel.CtSph#lookProcessChain private Entry entryWithPriority(ResourceWrapper resourceWrapper, int count, boolean prioritized, Object... args)throws BlockException {// 省略创建 Context 的代码// 黑盒…

gorm day1

gorm day1 gorm简介gorm声明模型 代码样例基本来自官方文档 Gorm简介 什么是ORM&#xff1f; 对象关系映射(Objection Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库(如mysql数据库&#xff09;存在的互不匹配现象的计数。简单来说&#xff0c;ORM是通…

【annie/lux 快速下载哔哩哔哩视频】全网最简单,只需要5步!!!

1.首先 现在annie更名为lux 官网地址&#xff1a;https://github.com/iawia002/lux/releases 2.进入官网之后如图所示 3.下载lux软件 4.下载lux 这里需要说明一下 如果不下载这个的话也可以下载视频 但是视频和音频是分开的&#xff0c;你的视频没有声音 5.下载视频

04、全文检索 -- Solr -- 管理 Solr 的 core(使用命令和图形界面创建、删除 core,以及对core 目录下的各文件进行详细介绍)

目录 管理 Solr 的 core创建 Core方式1&#xff1a;solr 命令创建演示&#xff1a;使用 solr 命令创建 Core&#xff1a;演示&#xff1a;命令删除 Core&#xff08;彻底删除&#xff09; 方式2&#xff1a;图形界面创建Web控制台创建CoreWeb控制台删除 Core&#xff08;未彻底…

软件测试学习笔记-测试用例的编写

7中测试分类 按照阶段可划分单元测试、集成测试、系统测试、验收测试。代码可见度划分黑盒测试、灰盒测试、白盒测试 单元测试&#xff1a;针对源代码的测试 集成测试&#xff1a;针对接口进行测试 系统测试&#xff1a;针对功能和非功能的测试 验收测试&#xff1a;公测、内测…