El principio del análisis en profundidad de la co-rutina del principio de la co-rutina del hilo del proceso en una lección

descargar: Análisis en profundidad del principio del proceso de co-rutinas Principio de co-rutinas en una lección

El conocimiento de las corrutinas se menciona en muchos cursos, pero es solo una muestra, no en profundidad. Como el primer curso especial de corrutinas en el mercado, este curso comenzará desde lo básico, se vinculará con los principios de la aplicación y hará que sea más fácil comprender los principios de las corrutinas.Combina casos de cursos enriquecidos y utiliza el lenguaje Python para la práctica de aterrizaje. Pero una ley es universal, no importa si está desarrollando en Java, Go o PHP, puede dominar el principio de corrutina a través de este curso. Para el desarrollo de nivel junior y medio, es un curso muy adecuado para comenzar a aprender el desarrollo de alto rendimiento.

Adecuado para la multitud
. Los estudiantes que
quieren dominar los principios subyacentes de los procesos, subprocesos y rutinas quieren romper con los cuellos de botella comerciales y mejorar la simultaneidad del proyecto. Los ingenieros
que quieren hacer una pregunta están confundidos. Los estudiantes que quieren clasificar sistemáticamente las corrutinas Se
requieren conocimientos para
tener una sintaxis básica de Python y
un backend. Experiencia del proyecto
IL void access (int x) {// Abre la ruta desde el nodo raíz ax, x es el más profundo
para (R y = 0; x; x = fa (y = x)) {
splay (x), rs (x) = y, pushup (x);
}
}
Make_root (x): convierte x en el nodo raíz

IL void makeroot (int x) {// Cambia x a la raíz del árbol original
access (x), splay (x), Rev (x);
}
Find_root (x): encuentra el nodo raíz donde x es

IL int findroot (int x) {// Encuentra la raíz del árbol original de
x access (x), splay (x);
while (ls (x)) pushdown (x), x = ls (x);
return x ;
}
Derramado (x, y): convierte la ruta de xay en una ruta de borde real

IL void split (int x, int y) {// y Mantiene la información en la ruta xy
makeroot (x), access (y), splay (y);
}
Link (x, y): Si x, y no están conectados , Luego une el lado (x, y)

IL void link (int x, int y) {
makeroot (x); if (findroot (y)! = X) fa (x) = y;
}
Cut (x, y): Si hay un borde entre xey , Eliminar el borde

IL void cut (int x, int y) {
split (x, y);
if (fa (x) == y && rs (x) == 0) fa (x) = ls (y) = 0, pushup (y) ;
}
Isroot (x): determina si x es el nodo raíz de la extensión

IL int nroot (int x) // devuelve 1 para aclarar que x no es la raíz, devuelve 0 para aclarar que x es la raíz
{return ls (fa (x)) == x || rs (fa (x)) == x;}
P3690 【Plantilla] Árbol de corte de enlace (árbol dinámico)
Adorable nuevo código ~ Código de viento aprendido del equipo de Yu

! [] ()! [] () `` `
1 #include <bits / stdc ++. H>
2 #define IL inline
3 #define R register int
4 #define ls (x) a [x] .ch [0]
5 #define rs (x) a [x] .ch [1]
6 #define fa (x) a [x] .fa
7
8 usando el espacio de nombres std;
9 const int N = 1e5 + 5, inf = 0x3f3f3f3f;
10
11 IL int read () {
12 int f = 1;
13 char ch;
14 while ((ch = getchar ()) <'0' || ch> '9') if (ch == '-') f = -1;
15 int res = ch-'0 ';
16 while ((ch = getchar ())> = '0' && ch <= '9') res = res10 + ch-'0 ';
17 return resf;
18}
19
20 int n, m;
21 struct hh {
22 int ch [2], fa, val, rev, sum;
23} a [N];


26 IL void Rev (int x) {swap (ls (x), rs (x)); a [x] .rev ^ = 1;}
27 IL void pushup (int x) {a [x] .sum = a [ls (x)]. sum ^ a [rs (x)]. sum ^ a [x] .val;}
28 IL int nroot (int x) // 返回 1 阐明 x 不是 根 , 返回 0 阐明 x 是 根
29 {return ls (fa (x)) == x || rs (fa (x)) == x;}
30
31 IL void pushdown (int x) {
32 if (a [x] .rev) {
33 a [x] .rev = 0;
34 si (ls (x)) Rev (ls (x));
35 si (rs (x)) Rev (rs (x));
36}
37}
38
39 IL void pushall (int x) {
40 if (nroot (x)) pushall (fa (x));
41 empujar (x);
42}
43
44 IL vacío rotar (int x) {
45 int y = fa (x), z = fa (y), k = chk (x), w = a [x] .ch [k ^ 1];
46 si (nroot (y)) a [z] .ch [chk (y)] = x; fa (x) = z;
47 si (w) fa (w) = y; a [y] .ch [k] = w;
48 fa (y) = x; a [x] .ch [k ^ 1] = y;
49 flexiones (y); flexiones (x);
50}
51
52 IL void splay (int x) {// girar x Para la raíz de splay
53 pushall (x);
54 while (nroot (x)) {
55 int y = fa (x);
56 if (nroot (y)) rotate (chk (x) ^ chk (y)? x: y);
57 rotate (x);
58}
59}
60
61 IL void access (int x) {// Abre la ruta desde el nodo raíz ax, x es el
62 más profundo para (R y = 0; x; x = fa (y = x)) {
63 splay (x), rs (x) = y, pushup (x);
64}
65}
66
67 IL void makeroot (int x) {// cambia x a la raíz de el árbol original
68 access (x), splay (x), Rev (x);
69}
70
71 IL int findroot (int x) {// Encuentra la raíz del árbol original de
x 72 access (x), splay ( x);
73 while (ls (x)) pushdown (x), x = ls (x);
74 return x;
75}
76
77 IL void split (int x, int y) {// y 維護 xy 途径 上 的 信息
78 makeroot (x), access (y), splay (y);
79}
80
81 IL void link (int x, int y) {
82 makeroot (x); if (findroot (y)! = X) fa (x) = y;
83}
84
85 IL corte vacío (int x, int y) {
86 split (x, y);
87 if (fa (x) == y && rs (x) == 0) fa (x) = ls (y) = 0, pushup (y);
88}
89
90 int main () {
91 n = leer ();
92 m = leer ();
93 para (R i = 1; i <= n; ++ i) a [i] .val = a [i] .sum = read ();
94 while (m--) {
95 int op = leer (), x = leer (), y = leer ();
96 if (! Op) split (x, y), printf ("% d \ n", a [y] .sum);
97 else if (op == 1) enlace (x, y);
98 else if (op == 2) cut (x, y);
99 else makeroot (x), a [x] .val = y, pushup (x);
100}
101 return 0;
102}

Supongo que te gusta

Origin blog.51cto.com/15134648/2665119
Recomendado
Clasificación