-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlocal-search.xml
More file actions
33 lines (15 loc) · 111 KB
/
local-search.xml
File metadata and controls
33 lines (15 loc) · 111 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title>椭圆上的点的切线方程的偏导数求法</title>
<link href="/2025/01/21/%E6%A4%AD%E5%9C%86%E4%B8%8A%E7%9A%84%E7%82%B9%E7%9A%84%E5%88%87%E7%BA%BF%E6%96%B9%E7%A8%8B%E7%9A%84%E5%81%8F%E5%AF%BC%E6%95%B0%E6%B1%82%E6%B3%95/"/>
<url>/2025/01/21/%E6%A4%AD%E5%9C%86%E4%B8%8A%E7%9A%84%E7%82%B9%E7%9A%84%E5%88%87%E7%BA%BF%E6%96%B9%E7%A8%8B%E7%9A%84%E5%81%8F%E5%AF%BC%E6%95%B0%E6%B1%82%E6%B3%95/</url>
<content type="html"><![CDATA[<h1 id="椭圆上的点的切线方程的偏导数求法"><a href="#椭圆上的点的切线方程的偏导数求法" class="headerlink" title="椭圆上的点的切线方程的偏导数求法"></a>椭圆上的点的切线方程的偏导数求法</h1><p>$Author$: 铜陵一中 缪语博</p><ul><li>声明:未参考任何网络资料</li></ul><h2 id="【题目】"><a href="#【题目】" class="headerlink" title="【题目】"></a>【题目】</h2><p>求证:对于一个椭圆 $C$:$\cfrac{x^2}{a^2} + \cfrac{y^2}{b^2} = 1(a>b>0)$,上有一点 $A(x_0,y_0)$,求证过点 $A$ 的切线方程为<br>$$<br>\cfrac{x\times x_0}{a^2} + \cfrac{y\times y_0}{b^2}=1<br>$$</p><h2 id="【求解】"><a href="#【求解】" class="headerlink" title="【求解】"></a>【求解】</h2><p>解:<br>对椭圆两边分别对 $x$ 求偏导数,得:<br>$$<br>\cfrac{2x}{a^2}+\cfrac{2y\times y’}{b^2} = 0<br>$$</p><ul><li>注:此处,可以将 $y$ 看成为 $f(x)$,那么,可以知道对于 $f(x)$ 求关于 $x$ 的偏导的结果为(运用复合函数的求导法则):<br>$$<br>(f^2(x))’= 2f(x)\times f’(x)<br>$$</li></ul><p>接下来,可得:<br>$$<br>y’=-\cfrac{x\times b^2}{y\times a^2}<br>$$</p><p>将点 $A(x_0,y_0)$ 代入可得:<br>$$<br>y’=-\cfrac{x_0\times b^2}{y_0\times a^2}<br>$$</p><p>故切线方程可以表示为:<br>$$<br>y=-\cfrac{x_0\times b^2}{y_0\times a^2} \times x + t<br>$$<br>其中,$t$ 为常数。</p><p>故再次将点 $A(x_0,y_0)$ 代入可得:<br>$$<br>y_0=-\cfrac{x_0\times b^2}{y_0\times a^2} \times x_0 + t<br>$$</p><p>故 $t=\cfrac{x_0^2\times b^2 + y_0^2 \times a^2}{y_0 \times a^2}$。</p><p>故原方程即为:<br>$$<br>y=-\cfrac{x_0\times b^2}{y_0\times a^2} \times x + \cfrac{x_0^2\times b^2 + y_0^2 \times a^2}{y_0 \times a^2}<br>$$</p><p>化简结果,即为:<br>$$<br>\cfrac{x\times x_0}{a^2} + \cfrac{y\times y_0}{b^2}=1<br>$$</p><p>证毕。</p>]]></content>
</entry>
<entry>
<title>算法模版</title>
<link href="/2025/01/21/%E7%AE%97%E6%B3%95%E6%A8%A1%E7%89%88/"/>
<url>/2025/01/21/%E7%AE%97%E6%B3%95%E6%A8%A1%E7%89%88/</url>
<content type="html"><![CDATA[<h1 id="算法模版"><a href="#算法模版" class="headerlink" title="$算法模版$"></a>$算法模版$</h1><ul><li>$Author:$ 缪语博</li></ul><p>本文档基于 $GPL-3.0 License$ </p><p>本文档 $GitHub$ 储存库:<a href="https://github.com/AMlhdSan/model">model</a></p><h2 id="目录-Contents"><a href="#目录-Contents" class="headerlink" title="$目录$ $Contents$"></a>$目录$ $Contents$</h2><ol><li><p><a href="#jump1">快读快写</a></p></li><li><p><a href="#jump2">线段树</a></p></li><li><p><a href="#jump3">中国剩余定理(拓展)</a></p></li><li><p><a href="#jump4">最短路算法</a></p></li><li><p><a href="#jump5">LCA最近公共祖先</a></p></li><li><p><a href="#jump6">高精度</a></p></li><li><p><a href="#jump7">树链剖分</a></p></li><li><p><a href="#jump8">网络流</a></p></li><li><p><a href="#jump9">KMP算法</a></p></li></ol><ul><li>基本格式</li></ul><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-meta">#<span class="hljs-keyword">include</span> <span class="hljs-string"><bits/stdc++.h></span></span><br><br><span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> std;<br><br><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{<br> <span class="hljs-built_in">freopen</span>(<span class="hljs-string">".in"</span>, <span class="hljs-string">"r"</span>, stdin);<br> <span class="hljs-built_in">freopen</span>(<span class="hljs-string">".out"</span>, <span class="hljs-string">"w"</span>, stdout);<br><br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>}<br></code></pre></td></tr></table></figure><ul><li>很好用的宏定义和函数</li></ul><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-meta">#<span class="hljs-keyword">define</span> ll long long </span><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> N 1000010</span><br><span class="hljs-comment">// 二分实现</span><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> MID ((l + r) >> 1)</span><br><span class="hljs-comment">// 线段树实现</span><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> PII pair<span class="hljs-string"><int, int></span></span><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> MAX(x, y, z) max((x), max((y), (z)))</span><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> PRI priority_queue</span><br><span class="hljs-comment">//此处注意到底是几个零</span><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> MOD 1000000007</span><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> FI first</span><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> SE second</span><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> IL inline</span><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> RE register</span><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> MINN -0x7fffffff</span><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> MAXX 0x7fffffff</span><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> HMINN -0x3f3f3f3f</span><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> HMAXX 0x3f3f3f3f</span><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> ENDL putchar(<span class="hljs-string">'\n'</span>)</span><br><br><span class="hljs-type">int</span> nxt[N], head[N], to[N], to[N];<br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">void</span> <span class="hljs-title">add_edge</span><span class="hljs-params">(<span class="hljs-type">int</span> u, <span class="hljs-type">int</span> v, ll c)</span> </span>{<br> nxt[++cnt] = head[u];<br> head[u] = cnt;<br> to[cnt] = v;<br> w[cnt] = c;<br>}<br><span class="hljs-comment">// 遍历:</span><br><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i = head[p]; i; i = nxt[i]) {<br> <span class="hljs-type">int</span> v = to[i];<br> <span class="hljs-comment">// Write what you want to write.</span><br>}<br><br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">void</span> <span class="hljs-title">madd</span><span class="hljs-params">(ll &a, ll b)</span> </span>{<br> a += b;<br> a %= MOD;<br>}<br></code></pre></td></tr></table></figure><h2 id="快读快写"><a href="#快读快写" class="headerlink" title=" $快读快写$ "></a><span id="jump1"> $快读快写$ </span></h2><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">int</span> <span class="hljs-title">read</span><span class="hljs-params">()</span> </span>{<br> <span class="hljs-type">int</span> x = <span class="hljs-number">0</span>, f = <span class="hljs-number">1</span>;<br> <span class="hljs-type">char</span> ch = <span class="hljs-built_in">getchar</span>();<br> <span class="hljs-keyword">while</span>(ch < <span class="hljs-string">'0'</span> || ch > <span class="hljs-string">'9'</span>) {<br> <span class="hljs-keyword">if</span>(ch == <span class="hljs-string">'-'</span>) {<br> f = <span class="hljs-number">-1</span>;<br> }<br> ch = <span class="hljs-built_in">getchar</span>();<br> }<br> <span class="hljs-keyword">while</span>(ch >= <span class="hljs-string">'0'</span> && ch <= <span class="hljs-string">'9'</span>) {<br> x = (x << <span class="hljs-number">3</span>) + (x << <span class="hljs-number">1</span>) + (ch ^ <span class="hljs-number">48</span>);<br> ch = <span class="hljs-built_in">getchar</span>();<br> }<br> <span class="hljs-keyword">return</span> x * f;<br>}<br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">void</span> <span class="hljs-title">write</span><span class="hljs-params">(<span class="hljs-type">int</span> x)</span> </span>{<br> <span class="hljs-keyword">if</span>(x < <span class="hljs-number">0</span>) {<br> <span class="hljs-built_in">putchar</span>(<span class="hljs-string">'-'</span>);<br> x = -x;<br> }<br> <span class="hljs-keyword">if</span>(x > <span class="hljs-number">9</span>)<br> <span class="hljs-built_in">write</span>(x / <span class="hljs-number">10</span>);<br> <span class="hljs-built_in">putchar</span>(x % <span class="hljs-number">10</span> + <span class="hljs-string">'0'</span>);<br>}<br><span class="hljs-function"><span class="hljs-keyword">inline</span> string <span class="hljs-title">stringread</span><span class="hljs-params">()</span> </span>{<br> string str = <span class="hljs-string">""</span>;<br> <span class="hljs-type">char</span> ch = <span class="hljs-built_in">getchar</span>();<br> <span class="hljs-keyword">while</span>(ch == <span class="hljs-string">' '</span> || ch == <span class="hljs-string">'\n'</span> || ch == <span class="hljs-string">'\r'</span>) {<br> ch = <span class="hljs-built_in">getchar</span>();<br> }<br> <span class="hljs-keyword">while</span>(ch != <span class="hljs-string">' '</span> && ch != <span class="hljs-string">'\n'</span> && ch != <span class="hljs-string">'\r'</span>) {<br> str += ch;<br> ch = <span class="hljs-built_in">getchar</span>();<br> } <br> <span class="hljs-keyword">return</span> str;<br>}<br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">void</span> <span class="hljs-title">stringwrite</span><span class="hljs-params">(string str)</span> </span>{<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i = <span class="hljs-number">0</span>; str[i] != <span class="hljs-string">'\0'</span>; ++i)<br> <span class="hljs-built_in">putchar</span>(str[i]);<br>}<br></code></pre></td></tr></table></figure><h2 id="线段树"><a href="#线段树" class="headerlink" title=" $线段树$ "></a><span id="jump2"> $线段树$ </span></h2><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-meta">#<span class="hljs-keyword">include</span> <span class="hljs-string"><bits/stdc++.h></span></span><br><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> N 100010</span><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> ll long long</span><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> ls (p << 1)</span><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> rs (p << 1 | 1)</span><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> mid ((l + r) >> 1)</span><br><br><span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> std;<br><br><span class="hljs-type">int</span> n, m;<br><span class="hljs-type">int</span> a[N];<br>ll tree[N << <span class="hljs-number">2</span>];<br><span class="hljs-type">int</span> siz[N << <span class="hljs-number">2</span>];<br><span class="hljs-type">int</span> lazy[N << <span class="hljs-number">2</span>];<br><br><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">upd</span><span class="hljs-params">(<span class="hljs-type">int</span> p)</span> </span>{<br> tree[p] = tree[ls] + tree[rs];<br>}<br><br><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">upds</span><span class="hljs-params">(<span class="hljs-type">int</span> p)</span> </span>{<br> siz[p] = siz[ls] + siz[rs];<br>}<br><br><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">pushd</span><span class="hljs-params">(<span class="hljs-type">int</span> p)</span> </span>{<br> tree[ls] += lazy[p] * siz[ls];<br> tree[rs] += lazy[p] * siz[rs];<br><br> lazy[ls] += lazy[p];<br> lazy[rs] += lazy[p];<br><br> lazy[p] = <span class="hljs-number">0</span>;<br>}<br><br><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">build</span><span class="hljs-params">(<span class="hljs-type">int</span> p, <span class="hljs-type">int</span> l, <span class="hljs-type">int</span> r)</span> </span>{<br><br> lazy[p] = <span class="hljs-number">0</span>;<br><br> <span class="hljs-keyword">if</span>(l == r) {<br> siz[p] = <span class="hljs-number">1</span>;<br> tree[p] = a[l];<br> <span class="hljs-keyword">return</span> ;<br> }<br><br> <span class="hljs-built_in">build</span>(ls, l, mid);<br> <span class="hljs-built_in">build</span>(rs, mid + <span class="hljs-number">1</span>, r);<br><br> <span class="hljs-built_in">upd</span>(p);<br> <span class="hljs-built_in">upds</span>(p);<br>}<br><br><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">mdf</span><span class="hljs-params">(<span class="hljs-type">int</span> p, <span class="hljs-type">int</span> l, <span class="hljs-type">int</span> r, <span class="hljs-type">int</span> ql, <span class="hljs-type">int</span> qr, <span class="hljs-type">int</span> k)</span> </span>{<br> <span class="hljs-keyword">if</span>(ql <= l && r <= qr) {<br> tree[p] += <span class="hljs-number">1ll</span> * siz[p] * k;<br> lazy[p] += k;<br> <span class="hljs-keyword">return</span>;<br> }<br> <span class="hljs-built_in">pushd</span>(p);<br> <span class="hljs-keyword">if</span>(ql <= mid) {<br> <span class="hljs-built_in">mdf</span>(ls, l, mid, ql, qr, k);<br> }<br> <span class="hljs-keyword">if</span>(qr > mid) {<br> <span class="hljs-built_in">mdf</span>(rs, mid + <span class="hljs-number">1</span>, r, ql, qr, k);<br> }<br> <span class="hljs-built_in">upd</span>(p);<br>}<br><br><span class="hljs-function">ll <span class="hljs-title">qry</span><span class="hljs-params">(<span class="hljs-type">int</span> p, <span class="hljs-type">int</span> l, <span class="hljs-type">int</span> r, <span class="hljs-type">int</span> ql, <span class="hljs-type">int</span> qr)</span> </span>{<br> <span class="hljs-keyword">if</span>(ql <= l && r <= qr) {<br> <span class="hljs-keyword">return</span> tree[p];<br> }<br> <span class="hljs-built_in">pushd</span>(p);<br><br> ll sum = <span class="hljs-number">0</span>;<br><br> <span class="hljs-keyword">if</span>(ql <= mid) {<br> sum += <span class="hljs-built_in">qry</span>(ls, l, mid, ql, qr);<br> }<br> <span class="hljs-keyword">if</span>(qr > mid) {<br> sum += <span class="hljs-built_in">qry</span>(rs, mid + <span class="hljs-number">1</span>, r, ql, qr);<br> }<br><br> <span class="hljs-keyword">return</span> sum;<br>}<br><br><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{<br><br> cin >> n >> m;<br><br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i <= n; ++i) {<br> cin >> a[i];<br> }<br><br> <span class="hljs-built_in">build</span>(<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, n);<br><br> <span class="hljs-keyword">while</span>(m--) {<br> <span class="hljs-type">int</span> op, x, y, k;<br><br> cin >> op >> x >> y;<br><br> <span class="hljs-keyword">if</span>(op == <span class="hljs-number">1</span>) {<br> cin >> k;<br> <span class="hljs-built_in">mdf</span>(<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, n, x, y, k);<br> }<br> <span class="hljs-keyword">else</span> {<br> cout << <span class="hljs-built_in">qry</span>(<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, n, x, y) << endl;<br> }<br> }<br><br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>}<br></code></pre></td></tr></table></figure><h2 id="中国剩余定理(拓展)"><a href="#中国剩余定理(拓展)" class="headerlink" title="$中国剩余定理(拓展)$ "></a><span id="jump3">$中国剩余定理(拓展)$ </span></h2><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-meta">#<span class="hljs-keyword">include</span> <span class="hljs-string"><bits/stdc++.h></span></span><br><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> N 100010</span><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> ll long long</span><br><br><span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> std;<br><br>ll n;<br>ll a[N], b[N];<br><br><span class="hljs-function">ll <span class="hljs-title">gcd</span><span class="hljs-params">(ll a, ll b)</span> </span>{<br> <span class="hljs-keyword">if</span>(!b) <br> <span class="hljs-keyword">return</span> a;<br> <span class="hljs-keyword">else</span> <span class="hljs-keyword">return</span> <span class="hljs-built_in">gcd</span>(b, a % b);<br>}<br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> ll <span class="hljs-title">read</span><span class="hljs-params">()</span> </span>{<br> ll x = <span class="hljs-number">0</span>, f = <span class="hljs-number">1</span>;<br> <span class="hljs-type">char</span> ch = <span class="hljs-built_in">getchar</span>();<br> <span class="hljs-keyword">while</span>(ch < <span class="hljs-string">'0'</span> || ch > <span class="hljs-string">'9'</span>) {<br> <span class="hljs-keyword">if</span>(ch == <span class="hljs-string">'-'</span>) {<br> f = <span class="hljs-number">-1</span>;<br> }<br> ch = <span class="hljs-built_in">getchar</span>();<br> }<br> <span class="hljs-keyword">while</span>(ch >= <span class="hljs-string">'0'</span> && ch <= <span class="hljs-string">'9'</span>) {<br> x = (x << <span class="hljs-number">3</span>) + (x << <span class="hljs-number">1</span>) + (ch ^ <span class="hljs-number">48</span>);<br> ch = <span class="hljs-built_in">getchar</span>();<br> }<br> <span class="hljs-keyword">return</span> x * f;<br>}<br><br><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">merge</span><span class="hljs-params">(ll p1, ll a1, ll p2, ll a2, ll &p, ll &a)</span> </span>{<br> p = p1 / <span class="hljs-built_in">gcd</span>(p1, p2) * p2;<br> <span class="hljs-keyword">if</span>(p1 < p2) {<br> <span class="hljs-built_in">swap</span>(p1, p2);<br> <span class="hljs-built_in">swap</span>(a1, a2);<br> }<br> a = a1;<br> <span class="hljs-keyword">while</span>(a % p2 != a2)<br> a += p1;<br>}<br><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{<br><br> n = <span class="hljs-built_in">read</span>();<br><br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i <= n; ++i) {<br> a[i] = <span class="hljs-built_in">read</span>();<br> b[i] = <span class="hljs-built_in">read</span>();<br> b[i] %= a[i];<br> }<br><br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i = <span class="hljs-number">2</span>; i <= n; ++i) {<br> <span class="hljs-built_in">merge</span>(a[i], b[i], a[i - <span class="hljs-number">1</span>], b[i - <span class="hljs-number">1</span>], a[i], b[i]);<br> }<br><br> cout << b[n] << endl;<br><br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>}<br></code></pre></td></tr></table></figure><h2 id="最短路算法"><a href="#最短路算法" class="headerlink" title=" $最短路算法$ "></a><span id="jump4"> $最短路算法$ </span></h2><h4 id="Floyed-算法"><a href="#Floyed-算法" class="headerlink" title="$Floyed$ 算法"></a>$Floyed$ 算法</h4><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-meta">#<span class="hljs-keyword">include</span> <span class="hljs-string"><bits/stdc++.h></span></span><br><span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> std;<br><br><span class="hljs-type">int</span> n, m;<br><span class="hljs-type">int</span> f[<span class="hljs-number">101</span>][<span class="hljs-number">101</span>];<br><span class="hljs-type">int</span> u, v, w;<br><br><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{<br><br> cin >> n >> m;<br><br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i <= n; ++i) {<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> j = <span class="hljs-number">1</span>; j <= n; ++j) {<br> f[i][j] = <span class="hljs-number">0x3f3f3f3f</span>;<br> <span class="hljs-keyword">if</span>(i == j) {<br> f[i][j] = <span class="hljs-number">0</span>;<br> }<br> }<br> }<br><br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i <= m; ++i) {<br> cin >> u >> v >> w;<br> f[u][v] = <span class="hljs-built_in">min</span>(f[u][v], w);<br> f[v][u] = f[u][v];<br> }<br><br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> k = <span class="hljs-number">1</span>; k <= n; ++k)<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i <= n; ++i)<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> j = <span class="hljs-number">1</span>; j <= n; ++j)<br> f[i][j] = <span class="hljs-built_in">min</span>(f[i][j], f[i][k] + f[k][j]);<br><br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i <= n; ++i) {<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> j = <span class="hljs-number">1</span>; j <= n; ++j) {<br> cout << f[i][j] << <span class="hljs-string">' '</span>;<br> }<br> cout << endl;<br> }<br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>}<br></code></pre></td></tr></table></figure><h4 id="Dijkstra-算法"><a href="#Dijkstra-算法" class="headerlink" title="$Dijkstra$ 算法"></a>$Dijkstra$ 算法</h4><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-meta">#<span class="hljs-keyword">include</span> <span class="hljs-string"><bits/stdc++.h></span></span><br><span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> std;<br><br><span class="hljs-type">int</span> n, m, s;<br><span class="hljs-keyword">struct</span> <span class="hljs-title class_">Edge</span> {<br> <span class="hljs-type">int</span> v, c;<br>}tmp;<br>vector<Edge> edges[<span class="hljs-number">100005</span>];<br><span class="hljs-type">int</span> dis[<span class="hljs-number">100005</span>];<br><span class="hljs-type">bool</span> vis[<span class="hljs-number">100005</span>];<br>priority_queue<pair<<span class="hljs-type">int</span>, <span class="hljs-type">int</span>> , vector<pair<<span class="hljs-type">int</span>, <span class="hljs-type">int</span>> >, greater<pair<<span class="hljs-type">int</span>, <span class="hljs-type">int</span>> > > pq;<br><br><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">dijkstra</span><span class="hljs-params">()</span> </span>{<br> <span class="hljs-built_in">memset</span>(dis, <span class="hljs-number">0x3f</span>, <span class="hljs-built_in">sizeof</span>(dis));<br> <span class="hljs-built_in">memset</span>(vis, <span class="hljs-literal">false</span>, <span class="hljs-built_in">sizeof</span>(vis));<br> dis[s] = <span class="hljs-number">0</span>;<br> pq.<span class="hljs-built_in">push</span>(<span class="hljs-built_in">make_pair</span>(<span class="hljs-number">0</span>, s));<br><br> <span class="hljs-keyword">while</span>(!pq.<span class="hljs-built_in">empty</span>()) {<br> <span class="hljs-type">int</span> u = pq.<span class="hljs-built_in">top</span>().second;<br> pq.<span class="hljs-built_in">pop</span>();<br> <span class="hljs-keyword">if</span>(vis[u])<br> <span class="hljs-keyword">continue</span>;<br> vis[u] = <span class="hljs-literal">true</span>;<br><br> <span class="hljs-keyword">for</span>(Edge e : edges[u]) {<br> <span class="hljs-keyword">if</span>(dis[e.v] > dis[u] + e.c) {<br> dis[e.v] = dis[u] + e.c;<br> pq.<span class="hljs-built_in">push</span>(<span class="hljs-built_in">make_pair</span>(dis[e.v], e.v));<br> }<br> }<br> }<br>}<br><br><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{<br><br> cin >> n >> m >> s;<br><br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i <= m; ++i) {<br> <span class="hljs-type">int</span> u, v, w;<br> cin >> u >> v >> w;<br> tmp.c = w;<br> tmp.v = v;<br> edges[u].<span class="hljs-built_in">push_back</span>(tmp);<br> }<br><br> <span class="hljs-built_in">dijkstra</span>();<br><br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i <= n; ++i)<br> cout << (dis[i] == <span class="hljs-number">0x3f3f3f3f</span> ? <span class="hljs-number">2147483647</span> : dis[i]) << <span class="hljs-string">' '</span>;<br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>}<br></code></pre></td></tr></table></figure><h4 id="Bellman-Ford-算法"><a href="#Bellman-Ford-算法" class="headerlink" title="$Bellman-Ford$ 算法"></a>$Bellman-Ford$ 算法</h4><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-meta">#<span class="hljs-keyword">include</span> <span class="hljs-string"><bits/stdc++.h></span></span><br><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> MAXN 100005</span><br><br><span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> std;<br><br><span class="hljs-type">int</span> n, m, s;<br><br><span class="hljs-keyword">struct</span> <span class="hljs-title class_">Edge</span> {<br> <span class="hljs-type">int</span> v;<br> <span class="hljs-type">int</span> c;<br>};<br><br>vector<Edge> edges[MAXN];<br><span class="hljs-type">int</span> dis[MAXN];<br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">int</span> <span class="hljs-title">read</span><span class="hljs-params">()</span> </span>{<br> <span class="hljs-type">int</span> x = <span class="hljs-number">0</span>, f = <span class="hljs-number">1</span>;<br> <span class="hljs-type">char</span> ch = <span class="hljs-number">0</span>;<br> <span class="hljs-keyword">while</span>(ch < <span class="hljs-string">'0'</span> || ch > <span class="hljs-string">'9'</span>) {<br> <span class="hljs-keyword">if</span>(ch == <span class="hljs-string">'-'</span>) {<br> f = <span class="hljs-number">-1</span>;<br> }<br> ch = <span class="hljs-built_in">getchar</span>();<br> }<br> <span class="hljs-keyword">while</span>(ch >= <span class="hljs-string">'0'</span> && ch <= <span class="hljs-string">'9'</span>) {<br> x = (x << <span class="hljs-number">3</span>) + (x << <span class="hljs-number">1</span>) + (ch ^ <span class="hljs-number">48</span>);<br> ch = <span class="hljs-built_in">getchar</span>();<br> }<br> <span class="hljs-keyword">return</span> x * f;<br>}<br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">void</span> <span class="hljs-title">write</span><span class="hljs-params">(<span class="hljs-type">int</span> x)</span> </span>{<br> <span class="hljs-keyword">if</span>(x < <span class="hljs-number">0</span>) {<br> <span class="hljs-built_in">putchar</span>(<span class="hljs-string">'-'</span>);<br> x = -x;<br> }<br> <span class="hljs-keyword">if</span>(x > <span class="hljs-number">9</span>)<br> <span class="hljs-built_in">write</span>(x / <span class="hljs-number">10</span>);<br> <span class="hljs-built_in">putchar</span>(x % <span class="hljs-number">10</span> + <span class="hljs-string">'0'</span>);<br>}<br><br><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">bellman_ford</span><span class="hljs-params">()</span> </span>{<br><br> <span class="hljs-built_in">memset</span>(dis, <span class="hljs-number">0x3f</span>, <span class="hljs-built_in">sizeof</span>(dis));<br><br> dis[s] = <span class="hljs-number">0</span>;<br><br> <span class="hljs-type">bool</span> flag;<br><br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i <= n - <span class="hljs-number">1</span>; ++i) {<br> flag = <span class="hljs-literal">false</span>;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> u = <span class="hljs-number">1</span>; u <= n; ++u) {<br> <span class="hljs-keyword">for</span>(Edge e : edges[u]) {<br> <span class="hljs-keyword">if</span>(dis[e.v] > dis[u] + e.c) {<br> dis[e.v] = dis[u] + e.c;<br> flag = <span class="hljs-literal">true</span>;<br> }<br> }<br> }<br> <span class="hljs-keyword">if</span>(!flag)<br> <span class="hljs-keyword">break</span>;<br> }<br>}<br><br><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{<br><br> n = <span class="hljs-built_in">read</span>();<br> m = <span class="hljs-built_in">read</span>();<br> s = <span class="hljs-built_in">read</span>();<br><br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i <= m; ++i) {<br> <span class="hljs-type">int</span> u, v, c;<br> u = <span class="hljs-built_in">read</span>();<br> v = <span class="hljs-built_in">read</span>();<br> c = <span class="hljs-built_in">read</span>();<br> Edge tmp;<br> tmp.c = c;<br> tmp.v = v;<br> edges[u].<span class="hljs-built_in">push_back</span>(tmp);<br> }<br><br> <span class="hljs-built_in">bellman_ford</span>();<br><br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i <= n; ++i) {<br> <span class="hljs-built_in">write</span>((dis[i] == <span class="hljs-number">0x3f3f3f3f</span> ? <span class="hljs-number">2147483647</span> : dis[i]));<br> <span class="hljs-built_in">putchar</span>(<span class="hljs-string">' '</span>);<br> }<br> <span class="hljs-built_in">putchar</span>(<span class="hljs-string">'\n'</span>);<br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>}<br></code></pre></td></tr></table></figure><h2 id="LCA-最近公共祖先"><a href="#LCA-最近公共祖先" class="headerlink" title=" $LCA$ $最近公共祖先$ "></a><span id="jump5"> $LCA$ $最近公共祖先$ </span></h2><h4 id="倍增写法:"><a href="#倍增写法:" class="headerlink" title="$倍增写法:$"></a>$倍增写法:$</h4><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-meta">#<span class="hljs-keyword">include</span> <span class="hljs-string"><bits/stdc++.h></span></span><br><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> N 500005</span><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> ll long long</span><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> M 31</span><br><br><span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> std;<br><br><span class="hljs-type">int</span> n, m, s;<br><span class="hljs-type">int</span> lg[N];<br><span class="hljs-type">int</span> xx, yy;<br>vector<<span class="hljs-type">int</span>> edge[N];<br><span class="hljs-type">int</span> dep[N];<br><span class="hljs-type">int</span> fa[N][M];<br><br><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">add_edge</span><span class="hljs-params">(<span class="hljs-type">int</span> u, <span class="hljs-type">int</span> v)</span> </span>{<br> edge[u].<span class="hljs-built_in">push_back</span>(v);<br> edge[v].<span class="hljs-built_in">push_back</span>(u);<br>}<br><br><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">dfs</span><span class="hljs-params">(<span class="hljs-type">int</span> p, <span class="hljs-type">int</span> pre)</span> </span>{<br> fa[p][<span class="hljs-number">0</span>] = pre;<br> dep[p] = dep[pre] + <span class="hljs-number">1</span>;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i <= lg[dep[p]]; ++i) {<br> fa[p][i] = fa[fa[p][i - <span class="hljs-number">1</span>]][i - <span class="hljs-number">1</span>];<br> }<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> nxt : edge[p]) {<br> <span class="hljs-keyword">if</span>(nxt != pre) {<br> <span class="hljs-built_in">dfs</span>(nxt, p);<br> }<br> }<br>}<br><br><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">lca</span><span class="hljs-params">(<span class="hljs-type">int</span> u, <span class="hljs-type">int</span> v)</span> </span>{<br> <span class="hljs-keyword">if</span>(dep[u] < dep[v]) {<br> <span class="hljs-built_in">swap</span>(u, v);<br> }<br> <span class="hljs-keyword">while</span>(dep[u] > dep[v]) {<br> u = fa[u][lg[dep[u] - dep[v]] - <span class="hljs-number">1</span>];<br> }<br> <span class="hljs-keyword">if</span>(u == v) {<br> <span class="hljs-keyword">return</span> u;<br> }<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> llg = lg[dep[u]] - <span class="hljs-number">1</span>; llg >= <span class="hljs-number">0</span>; --llg) {<br> <span class="hljs-keyword">if</span>(fa[u][llg] != fa[v][llg]) {<br> u = fa[u][llg];<br> v = fa[v][llg];<br> }<br> }<br><br> <span class="hljs-keyword">return</span> fa[u][<span class="hljs-number">0</span>];<br>}<br><br><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{<br><br> cin >> n >> m >> s;<br><br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i <= n - <span class="hljs-number">1</span>; ++i) {<br> cin >> xx >> yy;<br> <span class="hljs-built_in">add_edge</span>(xx, yy);<br> }<br><br> <span class="hljs-type">int</span> cntt = <span class="hljs-number">0</span>;<br><br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i <= n; ++i) {<br> <span class="hljs-keyword">if</span>(i >= (<span class="hljs-number">1</span> << cntt)) {<br> ++cntt;<br> lg[i] = cntt;<br> }<br> <span class="hljs-keyword">else</span> {<br> lg[i] = cntt;<br> }<br> }<br><br> <span class="hljs-built_in">dfs</span>(s, <span class="hljs-number">0</span>);<br><br> <span class="hljs-keyword">while</span>(m--) {<br> cin >> xx >> yy;<br> cout << <span class="hljs-built_in">lca</span>(xx, yy) << endl;<br> }<br><br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>}<br></code></pre></td></tr></table></figure><h2 id="高精度"><a href="#高精度" class="headerlink" title=" $高精度$ "></a><span id="jump6"> $高精度$ </span></h2><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">compare</span><span class="hljs-params">(string str1,string str2)</span></span><br><span class="hljs-function"></span>{<br> <span class="hljs-keyword">if</span>(str<span class="hljs-number">1.l</span>ength()>str<span class="hljs-number">2.l</span>ength()) <span class="hljs-keyword">return</span> <span class="hljs-number">1</span>;<br> <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span>(str<span class="hljs-number">1.l</span>ength()<str<span class="hljs-number">2.l</span>ength()) <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;<br> <span class="hljs-keyword">else</span> <span class="hljs-keyword">return</span> str<span class="hljs-number">1.</span><span class="hljs-built_in">compare</span>(str2);<br>}<br><br><span class="hljs-comment">//高精度加法</span><br><span class="hljs-comment">//只能是两个正数相加</span><br><span class="hljs-function">string <span class="hljs-title">add</span><span class="hljs-params">(string str1,string str2)</span></span><br><span class="hljs-function"></span>{<br> string str;<br> <span class="hljs-type">int</span> len1=str<span class="hljs-number">1.l</span>ength();<br> <span class="hljs-type">int</span> len2=str<span class="hljs-number">2.l</span>ength();<br> <span class="hljs-comment">//前面补0,弄成长度相同</span><br> <span class="hljs-keyword">if</span>(len1<len2)<br> {<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i<=len2-len1;i++)<br> str1=<span class="hljs-string">"0"</span>+str1;<br> }<br> <span class="hljs-keyword">else</span><br> {<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i<=len1-len2;i++)<br> str2=<span class="hljs-string">"0"</span>+str2;<br> }<br> len1=str<span class="hljs-number">1.l</span>ength();<br> <span class="hljs-type">int</span> cf=<span class="hljs-number">0</span>;<br> <span class="hljs-type">int</span> temp;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=len1<span class="hljs-number">-1</span>;i>=<span class="hljs-number">0</span>;i--)<br> {<br> temp=str1[i]-<span class="hljs-string">'0'</span>+str2[i]-<span class="hljs-string">'0'</span>+cf;<br> cf=temp/<span class="hljs-number">10</span>;<br> temp%=<span class="hljs-number">10</span>;<br> str=<span class="hljs-built_in">char</span>(temp+<span class="hljs-string">'0'</span>)+str;<br> }<br> <span class="hljs-keyword">if</span>(cf!=<span class="hljs-number">0</span>) str=<span class="hljs-built_in">char</span>(cf+<span class="hljs-string">'0'</span>)+str;<br> <span class="hljs-keyword">return</span> str;<br>}<br><br><span class="hljs-comment">//高精度减法</span><br><span class="hljs-comment">//只能是两个正数相减,而且要大减小</span><br><span class="hljs-function">string <span class="hljs-title">sub</span><span class="hljs-params">(string str1,string str2)</span></span><br><span class="hljs-function"></span>{<br> string str;<br> <span class="hljs-type">int</span> tmp=str<span class="hljs-number">1.l</span>ength()-str<span class="hljs-number">2.l</span>ength();<br> <span class="hljs-type">int</span> cf=<span class="hljs-number">0</span>;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=str<span class="hljs-number">2.l</span>ength()<span class="hljs-number">-1</span>;i>=<span class="hljs-number">0</span>;i--)<br> {<br> <span class="hljs-keyword">if</span>(str1[tmp+i]<str2[i]+cf)<br> {<br> str=<span class="hljs-built_in">char</span>(str1[tmp+i]-str2[i]-cf+<span class="hljs-string">'0'</span><span class="hljs-number">+10</span>)+str;<br> cf=<span class="hljs-number">1</span>;<br> }<br> <span class="hljs-keyword">else</span><br> {<br> str=<span class="hljs-built_in">char</span>(str1[tmp+i]-str2[i]-cf+<span class="hljs-string">'0'</span>)+str;<br> cf=<span class="hljs-number">0</span>;<br> }<br> }<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=tmp<span class="hljs-number">-1</span>;i>=<span class="hljs-number">0</span>;i--)<br> {<br> <span class="hljs-keyword">if</span>(str1[i]-cf>=<span class="hljs-string">'0'</span>)<br> {<br> str=<span class="hljs-built_in">char</span>(str1[i]-cf)+str;<br> cf=<span class="hljs-number">0</span>;<br> }<br> <span class="hljs-keyword">else</span><br> {<br> str=<span class="hljs-built_in">char</span>(str1[i]-cf<span class="hljs-number">+10</span>)+str;<br> cf=<span class="hljs-number">1</span>;<br> }<br> }<br> str.<span class="hljs-built_in">erase</span>(<span class="hljs-number">0</span>,str.<span class="hljs-built_in">find_first_not_of</span>(<span class="hljs-string">'0'</span>));<span class="hljs-comment">//去除结果中多余的前导0</span><br> <span class="hljs-keyword">return</span> str;<br>}<br><br><span class="hljs-comment">//高精度乘法</span><br><span class="hljs-comment">//只能是两个正数相乘</span><br><span class="hljs-function">string <span class="hljs-title">mul</span><span class="hljs-params">(string str1,string str2)</span></span><br><span class="hljs-function"></span>{<br> string str;<br> <span class="hljs-type">int</span> len1=str<span class="hljs-number">1.l</span>ength();<br> <span class="hljs-type">int</span> len2=str<span class="hljs-number">2.l</span>ength();<br> string tempstr;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=len2<span class="hljs-number">-1</span>;i>=<span class="hljs-number">0</span>;i--)<br> {<br> tempstr=<span class="hljs-string">""</span>;<br> <span class="hljs-type">int</span> temp=str2[i]-<span class="hljs-string">'0'</span>;<br> <span class="hljs-type">int</span> t=<span class="hljs-number">0</span>;<br> <span class="hljs-type">int</span> cf=<span class="hljs-number">0</span>;<br> <span class="hljs-keyword">if</span>(temp!=<span class="hljs-number">0</span>)<br> {<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> j=<span class="hljs-number">1</span>;j<=len2<span class="hljs-number">-1</span>-i;j++)<br> tempstr+=<span class="hljs-string">"0"</span>;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> j=len1<span class="hljs-number">-1</span>;j>=<span class="hljs-number">0</span>;j--)<br> {<br> t=(temp*(str1[j]-<span class="hljs-string">'0'</span>)+cf)%<span class="hljs-number">10</span>;<br> cf=(temp*(str1[j]-<span class="hljs-string">'0'</span>)+cf)/<span class="hljs-number">10</span>;<br> tempstr=<span class="hljs-built_in">char</span>(t+<span class="hljs-string">'0'</span>)+tempstr;<br> }<br> <span class="hljs-keyword">if</span>(cf!=<span class="hljs-number">0</span>) tempstr=<span class="hljs-built_in">char</span>(cf+<span class="hljs-string">'0'</span>)+tempstr;<br> }<br> str=<span class="hljs-built_in">add</span>(str,tempstr);<br> }<br> str.<span class="hljs-built_in">erase</span>(<span class="hljs-number">0</span>,str.<span class="hljs-built_in">find_first_not_of</span>(<span class="hljs-string">'0'</span>));<br> <span class="hljs-keyword">return</span> str;<br>}<br><br><span class="hljs-comment">//高精度除法</span><br><span class="hljs-comment">//两个正数相除,商为quotient,余数为residue</span><br><span class="hljs-comment">//需要高精度减法和乘法</span><br><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">div</span><span class="hljs-params">(string str1,string str2,string &quotient,string &residue)</span></span><br><span class="hljs-function"></span>{<br> quotient=residue=<span class="hljs-string">""</span>;<span class="hljs-comment">//清空</span><br> <span class="hljs-keyword">if</span>(str2==<span class="hljs-string">"0"</span>)<span class="hljs-comment">//判断除数是否为0</span><br> {<br> quotient=residue=<span class="hljs-string">"ERROR"</span>;<br> <span class="hljs-keyword">return</span>;<br> }<br> <span class="hljs-keyword">if</span>(str1==<span class="hljs-string">"0"</span>)<span class="hljs-comment">//判断被除数是否为0</span><br> {<br> quotient=residue=<span class="hljs-string">"0"</span>;<br> <span class="hljs-keyword">return</span>;<br> }<br> <span class="hljs-type">int</span> res=<span class="hljs-built_in">compare</span>(str1,str2);<br> <span class="hljs-keyword">if</span>(res<<span class="hljs-number">0</span>)<br> {<br> quotient=<span class="hljs-string">"0"</span>;<br> residue=str1;<br> <span class="hljs-keyword">return</span>;<br> }<br> <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span>(res==<span class="hljs-number">0</span>)<br> {<br> quotient=<span class="hljs-string">"1"</span>;<br> residue=<span class="hljs-string">"0"</span>;<br> <span class="hljs-keyword">return</span>;<br> }<br> <span class="hljs-keyword">else</span><br> {<br> <span class="hljs-type">int</span> len1=str<span class="hljs-number">1.l</span>ength();<br> <span class="hljs-type">int</span> len2=str<span class="hljs-number">2.l</span>ength();<br> string tempstr;<br> tempstr.<span class="hljs-built_in">append</span>(str1,<span class="hljs-number">0</span>,len2<span class="hljs-number">-1</span>);<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=len2<span class="hljs-number">-1</span>;i<len1;i++)<br> {<br> tempstr=tempstr+str1[i];<br> tempstr.<span class="hljs-built_in">erase</span>(<span class="hljs-number">0</span>,tempstr.<span class="hljs-built_in">find_first_not_of</span>(<span class="hljs-string">'0'</span>));<br> <span class="hljs-keyword">if</span>(tempstr.<span class="hljs-built_in">empty</span>())<br> tempstr=<span class="hljs-string">"0"</span>;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">char</span> ch=<span class="hljs-string">'9'</span>;ch>=<span class="hljs-string">'0'</span>;ch--)<span class="hljs-comment">//试商</span><br> {<br> string str,tmp;<br> str=str+ch;<br> tmp=<span class="hljs-built_in">mul</span>(str2,str);<br> <span class="hljs-keyword">if</span>(<span class="hljs-built_in">compare</span>(tmp,tempstr)<=<span class="hljs-number">0</span>)<span class="hljs-comment">//试商成功</span><br> {<br> quotient=quotient+ch;<br> tempstr=<span class="hljs-built_in">sub</span>(tempstr,tmp);<br> <span class="hljs-keyword">break</span>;<br> }<br> }<br> }<br> residue=tempstr;<br> }<br> quotient.<span class="hljs-built_in">erase</span>(<span class="hljs-number">0</span>,quotient.<span class="hljs-built_in">find_first_not_of</span>(<span class="hljs-string">'0'</span>));<br> <span class="hljs-keyword">if</span>(quotient.<span class="hljs-built_in">empty</span>()) quotient=<span class="hljs-string">"0"</span>;<br>}<br></code></pre></td></tr></table></figure><h2 id="树链剖分"><a href="#树链剖分" class="headerlink" title=" $树链剖分$ "></a><span id="jump7"> $树链剖分$ </span></h2><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-meta">#<span class="hljs-keyword">include</span> <span class="hljs-string"><bits/stdc++.h></span></span><br><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> N 200010</span><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> ENDL putchar(<span class="hljs-string">'\n'</span>)</span><br><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> mid ((l + r) >> 1)</span><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> ls (p << 1)</span><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> rs (p << 1 | 1)</span><br><br><span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> std;<br><br><span class="hljs-type">int</span> n, m, r, MOD;<br><span class="hljs-type">int</span> nxt[N], head[N], to[N], w[N];<br><span class="hljs-type">int</span> top[N];<br><span class="hljs-type">int</span> si[N], fa[N], id[N], son[N], wt[N], dep[N];<br><span class="hljs-type">int</span> cnt = <span class="hljs-number">0</span>, e = <span class="hljs-number">0</span>;<br><span class="hljs-type">int</span> tree[N << <span class="hljs-number">2</span>], siz[N << <span class="hljs-number">2</span>], lazy[N << <span class="hljs-number">2</span>];<br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">int</span> <span class="hljs-title">read</span><span class="hljs-params">()</span> </span>{<br> <span class="hljs-type">int</span> x = <span class="hljs-number">0</span>, f = <span class="hljs-number">1</span>;<br> <span class="hljs-type">char</span> ch = <span class="hljs-built_in">getchar</span>();<br> <span class="hljs-keyword">while</span>(ch < <span class="hljs-string">'0'</span> || ch > <span class="hljs-string">'9'</span>) {<br> <span class="hljs-keyword">if</span>(ch == <span class="hljs-string">'-'</span>) {<br> f = <span class="hljs-number">-1</span>;<br> }<br> ch = <span class="hljs-built_in">getchar</span>();<br> }<br> <span class="hljs-keyword">while</span>(ch >= <span class="hljs-string">'0'</span> && ch <= <span class="hljs-string">'9'</span>) {<br> x = (x << <span class="hljs-number">3</span>) + (x << <span class="hljs-number">1</span>) + (ch ^ <span class="hljs-number">48</span>);<br> ch = <span class="hljs-built_in">getchar</span>();<br> }<br> <span class="hljs-keyword">return</span> x * f;<br>}<br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">void</span> <span class="hljs-title">write</span><span class="hljs-params">(<span class="hljs-type">int</span> x)</span> </span>{<br> <span class="hljs-keyword">if</span>(x < <span class="hljs-number">0</span>) {<br> <span class="hljs-built_in">putchar</span>(<span class="hljs-string">'-'</span>);<br> x = -x;<br> }<br> <span class="hljs-keyword">if</span>(x > <span class="hljs-number">9</span>)<br> <span class="hljs-built_in">write</span>(x / <span class="hljs-number">10</span>);<br> <span class="hljs-built_in">putchar</span>(x % <span class="hljs-number">10</span> + <span class="hljs-string">'0'</span>);<br>}<br><br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">void</span> <span class="hljs-title">add</span><span class="hljs-params">(<span class="hljs-type">int</span> &a, <span class="hljs-type">int</span> b)</span> </span>{<br> a = (a + b) % MOD;<br>}<br><br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">void</span> <span class="hljs-title">upd</span><span class="hljs-params">(<span class="hljs-type">int</span> p)</span> </span>{<br> tree[p] = (tree[ls] + tree[rs]) % MOD;<br>}<br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">void</span> <span class="hljs-title">upds</span><span class="hljs-params">(<span class="hljs-type">int</span> p)</span> </span>{<br> siz[p] = siz[ls] + siz[rs];<br>}<br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">void</span> <span class="hljs-title">pushd</span><span class="hljs-params">(<span class="hljs-type">int</span> p)</span> </span>{<br> <span class="hljs-keyword">if</span>(!lazy[p])<br> <span class="hljs-keyword">return</span>;<br><br> <span class="hljs-built_in">add</span>(tree[ls], siz[ls] * lazy[p] % MOD);<br> <span class="hljs-built_in">add</span>(tree[rs], siz[rs] * lazy[p] % MOD);<br><br> <span class="hljs-built_in">add</span>(lazy[ls], lazy[p]);<br> <span class="hljs-built_in">add</span>(lazy[rs], lazy[p]);<br><br> lazy[p] = <span class="hljs-number">0</span>;<br>}<br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">void</span> <span class="hljs-title">build</span><span class="hljs-params">(<span class="hljs-type">int</span> p, <span class="hljs-type">int</span> l, <span class="hljs-type">int</span> r)</span> </span>{<br> <span class="hljs-keyword">if</span>(l == r) {<br> tree[p] = wt[l];<br> siz[p] = <span class="hljs-number">1</span>;<br> lazy[p] = <span class="hljs-number">0</span>;<br> <span class="hljs-keyword">return</span>;<br> }<br> <span class="hljs-built_in">build</span>(ls, l, mid);<br> <span class="hljs-built_in">build</span>(rs, mid + <span class="hljs-number">1</span>, r);<br> <span class="hljs-built_in">upd</span>(p);<br> <span class="hljs-built_in">upds</span>(p);<br>}<br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">void</span> <span class="hljs-title">mdf</span><span class="hljs-params">(<span class="hljs-type">int</span> p, <span class="hljs-type">int</span> l, <span class="hljs-type">int</span> r, <span class="hljs-type">int</span> ql, <span class="hljs-type">int</span> qr, <span class="hljs-type">int</span> x)</span> </span>{<br> <span class="hljs-keyword">if</span>(ql <= l && r <= qr) {<br> <span class="hljs-built_in">add</span>(tree[p], siz[p] * x % MOD);<br> <span class="hljs-built_in">add</span>(lazy[p], x);<br> <span class="hljs-keyword">return</span>;<br> }<br> <span class="hljs-built_in">pushd</span>(p);<br> <span class="hljs-keyword">if</span>(ql <= mid) {<br> <span class="hljs-built_in">mdf</span>(ls, l, mid, ql, qr, x);<br> }<br> <span class="hljs-keyword">if</span>(qr > mid) {<br> <span class="hljs-built_in">mdf</span>(rs, mid + <span class="hljs-number">1</span>, r, ql, qr, x);<br> }<br> <span class="hljs-built_in">upd</span>(p);<br>}<br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">int</span> <span class="hljs-title">qry</span><span class="hljs-params">(<span class="hljs-type">int</span> p, <span class="hljs-type">int</span> l, <span class="hljs-type">int</span> r, <span class="hljs-type">int</span> ql, <span class="hljs-type">int</span> qr)</span> </span>{<br> <span class="hljs-keyword">if</span>(ql <= l && r <= qr) {<br> <span class="hljs-keyword">return</span> tree[p];<br> }<br> <span class="hljs-built_in">pushd</span>(p);<br> <span class="hljs-type">int</span> sum = <span class="hljs-number">0</span>;<br> <span class="hljs-keyword">if</span>(ql <= mid) {<br> <span class="hljs-built_in">add</span>(sum, <span class="hljs-built_in">qry</span>(ls, l, mid, ql, qr));<br> }<br> <span class="hljs-keyword">if</span>(qr > mid) {<br> <span class="hljs-built_in">add</span>(sum, <span class="hljs-built_in">qry</span>(rs, mid + <span class="hljs-number">1</span>, r, ql, qr));<br> }<br> <span class="hljs-keyword">return</span> sum;<br>}<br><br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">void</span> <span class="hljs-title">add_edge</span><span class="hljs-params">(<span class="hljs-type">int</span> u, <span class="hljs-type">int</span> v)</span> </span>{<br> nxt[++e] = head[u];<br> head[u] = e;<br> to[e] = v;<br>}<br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">void</span> <span class="hljs-title">dfs1</span><span class="hljs-params">(<span class="hljs-type">int</span> p, <span class="hljs-type">int</span> pre, <span class="hljs-type">int</span> depth)</span> </span>{<br> dep[p] = depth;<br> fa[p] = pre;<br> si[p] = <span class="hljs-number">1</span>;<br> <span class="hljs-type">int</span> maxx = <span class="hljs-number">-1</span>;<br><br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i = head[p]; i; i = nxt[i]) {<br> <span class="hljs-type">int</span> v = to[i];<br> <span class="hljs-keyword">if</span>(v != pre) {<br> <span class="hljs-built_in">dfs1</span>(v, p, depth + <span class="hljs-number">1</span>);<br> si[p] += si[v];<br> <span class="hljs-keyword">if</span>(si[v] > maxx) {<br> maxx = si[v];<br> son[p] = v;<br> }<br> }<br> }<br>}<br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">void</span> <span class="hljs-title">dfs2</span><span class="hljs-params">(<span class="hljs-type">int</span> p, <span class="hljs-type">int</span> topp)</span> </span>{<br> id[p] = ++cnt;<br> wt[cnt] = w[p];<br> top[p] = topp;<br> <span class="hljs-keyword">if</span>(!son[p])<br> <span class="hljs-keyword">return</span>;<br> <span class="hljs-built_in">dfs2</span>(son[p], topp);<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i = head[p]; i; i = nxt[i]) {<br> <span class="hljs-type">int</span> v = to[i];<br> <span class="hljs-keyword">if</span>(v != son[p] && v != fa[p]) {<br> <span class="hljs-built_in">dfs2</span>(v, v);<br> }<br> }<br>}<br><br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">void</span> <span class="hljs-title">modify1</span><span class="hljs-params">(<span class="hljs-type">int</span> l, <span class="hljs-type">int</span> r, <span class="hljs-type">int</span> x)</span> </span>{<br> x %= MOD;<br> <span class="hljs-keyword">while</span>(top[l] != top[r]) {<br> <span class="hljs-keyword">if</span>(dep[top[l]] < dep[top[r]]) {<br> <span class="hljs-built_in">swap</span>(l, r);<br> }<br> <span class="hljs-built_in">mdf</span>(<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, n, id[top[l]], id[l], x);<br> l = fa[top[l]];<br> }<br> <span class="hljs-keyword">if</span>(dep[l] > dep[r])<br> <span class="hljs-built_in">swap</span>(l, r);<br> <span class="hljs-built_in">mdf</span>(<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, n, id[l], id[r], x);<br>}<br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">int</span> <span class="hljs-title">query1</span><span class="hljs-params">(<span class="hljs-type">int</span> l, <span class="hljs-type">int</span> r)</span> </span>{<br> <span class="hljs-type">int</span> sum = <span class="hljs-number">0</span>;<br> <span class="hljs-keyword">while</span>(top[l] != top[r]) {<br> <span class="hljs-keyword">if</span>(dep[top[l]] < dep[top[r]]) {<br> <span class="hljs-built_in">swap</span>(l, r);<br> }<br> <span class="hljs-built_in">add</span>(sum, <span class="hljs-built_in">qry</span>(<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, n, id[top[l]], id[l]));<br> l = fa[top[l]];<br> }<br> <span class="hljs-keyword">if</span>(dep[l] > dep[r])<br> <span class="hljs-built_in">swap</span>(l, r);<br> <span class="hljs-built_in">add</span>(sum, <span class="hljs-built_in">qry</span>(<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, n, id[l], id[r]));<br> <span class="hljs-keyword">return</span> sum;<br>}<br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">void</span> <span class="hljs-title">modify2</span><span class="hljs-params">(<span class="hljs-type">int</span> p, <span class="hljs-type">int</span> x)</span> </span>{<br> <span class="hljs-built_in">mdf</span>(<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, n, id[p], id[p] + si[p] - <span class="hljs-number">1</span>, x);<br>}<br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">int</span> <span class="hljs-title">query2</span><span class="hljs-params">(<span class="hljs-type">int</span> p)</span> </span>{<br> <span class="hljs-keyword">return</span> <span class="hljs-built_in">qry</span>(<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, n, id[p], id[p] + si[p] - <span class="hljs-number">1</span>) % MOD;<br>}<br><br><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{<br><br> n = <span class="hljs-built_in">read</span>();<br> m = <span class="hljs-built_in">read</span>();<br> r = <span class="hljs-built_in">read</span>();<br> MOD = <span class="hljs-built_in">read</span>();<br><br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i <= n; ++i) {<br> w[i] = <span class="hljs-built_in">read</span>();<br> }<br><br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i <= n - <span class="hljs-number">1</span>; ++i) {<br> <span class="hljs-type">int</span> u, v;<br> u = <span class="hljs-built_in">read</span>();<br> v = <span class="hljs-built_in">read</span>();<br> <span class="hljs-built_in">add_edge</span>(u, v);<br> <span class="hljs-built_in">add_edge</span>(v, u);<br> }<br><br> <span class="hljs-built_in">dfs1</span>(r, <span class="hljs-number">0</span>, <span class="hljs-number">1</span>);<br> <span class="hljs-built_in">dfs2</span>(r, r);<br><br> <span class="hljs-built_in">build</span>(<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, n);<br><br> <span class="hljs-keyword">while</span>(m--) {<br> <span class="hljs-type">int</span> op;<br> op = <span class="hljs-built_in">read</span>();<br> <span class="hljs-keyword">if</span>(op == <span class="hljs-number">1</span>) {<br> <span class="hljs-type">int</span> x, y, z;<br> x = <span class="hljs-built_in">read</span>();<br> y = <span class="hljs-built_in">read</span>();<br> z = <span class="hljs-built_in">read</span>();<br> <span class="hljs-built_in">modify1</span>(x, y, z);<br> }<br> <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span>(op == <span class="hljs-number">2</span>) {<br> <span class="hljs-type">int</span> x, y;<br> x = <span class="hljs-built_in">read</span>();<br> y = <span class="hljs-built_in">read</span>();<br> <span class="hljs-built_in">write</span>(<span class="hljs-built_in">query1</span>(x, y));<br> ENDL;<br> }<br> <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span>(op == <span class="hljs-number">3</span>) {<br> <span class="hljs-type">int</span> x, z;<br> x = <span class="hljs-built_in">read</span>();<br> z = <span class="hljs-built_in">read</span>();<br> <span class="hljs-built_in">modify2</span>(x, z);<br> }<br> <span class="hljs-keyword">else</span> {<br> <span class="hljs-type">int</span> x;<br> x = <span class="hljs-built_in">read</span>();<br> <span class="hljs-built_in">write</span>(<span class="hljs-built_in">query2</span>(x));<br> ENDL;<br> }<br> }<br><br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>}<br></code></pre></td></tr></table></figure><h2 id="网络流"><a href="#网络流" class="headerlink" title=" $网络流$ "></a><span id="jump8"> $网络流$ </span></h2><h4 id="Dinic-最大流"><a href="#Dinic-最大流" class="headerlink" title="$Dinic$ 最大流"></a>$Dinic$ 最大流</h4><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-meta">#<span class="hljs-keyword">include</span> <span class="hljs-string"><bits/stdc++.h></span></span><br><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> N 500010</span><br><br><span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> std;<br><br><span class="hljs-type">long</span> <span class="hljs-type">long</span> nxt[N], to[N], head[N], w[N];<br><span class="hljs-type">long</span> <span class="hljs-type">long</span> now[N];<br><span class="hljs-type">int</span> d[N];<br><span class="hljs-type">long</span> <span class="hljs-type">long</span> n, m, s, t;<br><span class="hljs-type">long</span> <span class="hljs-type">long</span> cnt = <span class="hljs-number">1</span>;<br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">void</span> <span class="hljs-title">add</span><span class="hljs-params">(<span class="hljs-type">int</span> u, <span class="hljs-type">int</span> v, <span class="hljs-type">long</span> <span class="hljs-type">long</span> c)</span> </span>{<br> nxt[++cnt] = head[u];<br> head[u] = cnt;<br> to[cnt] = v;<br> w[cnt] = c;<br><br> nxt[++cnt] = head[v];<br> head[v] = cnt;<br> to[cnt] = u;<br> w[cnt] = <span class="hljs-number">0</span>;<br>}<br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">bool</span> <span class="hljs-title">bfs</span><span class="hljs-params">()</span> </span>{<br> queue<<span class="hljs-type">int</span>> q;<br> q.<span class="hljs-built_in">push</span>(s);<br> <span class="hljs-built_in">memset</span>(d, <span class="hljs-number">0x3f</span>, <span class="hljs-built_in">sizeof</span>(d));<br> d[s] = <span class="hljs-number">0</span>;<br> now[s] = head[s];<br> <span class="hljs-keyword">while</span>(!q.<span class="hljs-built_in">empty</span>()) {<br> <span class="hljs-type">int</span> x = q.<span class="hljs-built_in">front</span>();<br> q.<span class="hljs-built_in">pop</span>();<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i = head[x]; i; i = nxt[i]) {<br> <span class="hljs-type">int</span> v = to[i];<br> <span class="hljs-keyword">if</span>(d[v] == <span class="hljs-number">0x3f3f3f3f</span> && w[i] > <span class="hljs-number">0</span>) {<br> d[v] = d[x] + <span class="hljs-number">1</span>;<br> now[v] = head[v];<br> q.<span class="hljs-built_in">push</span>(v);<br> <span class="hljs-keyword">if</span>(v == t) {<br> <span class="hljs-keyword">return</span> <span class="hljs-number">1</span>;<br> }<br> }<br> }<br> }<br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>}<br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">long</span> <span class="hljs-type">long</span> <span class="hljs-title">dfs</span><span class="hljs-params">(<span class="hljs-type">int</span> x, <span class="hljs-type">long</span> <span class="hljs-type">long</span> flow)</span> </span>{<br> <span class="hljs-keyword">if</span>(x == t) {<br> <span class="hljs-keyword">return</span> flow;<br> }<br> <span class="hljs-type">long</span> <span class="hljs-type">long</span> k;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i = now[x]; i; i = nxt[i]) {<br> now[x] = i;<br> <span class="hljs-type">int</span> v = to[i];<br> <span class="hljs-keyword">if</span>(d[v] != d[x] + <span class="hljs-number">1</span> || w[i] <= <span class="hljs-number">0</span>) {<br> <span class="hljs-keyword">continue</span>;<br> }<br> k = <span class="hljs-built_in">dfs</span>(v, <span class="hljs-built_in">min</span>(flow, w[i]));<br> <span class="hljs-keyword">if</span>(k) {<br> w[i] -= k;<br> w[i ^ <span class="hljs-number">1</span>] += k;<br> <span class="hljs-keyword">return</span> k;<br> }<br> <span class="hljs-keyword">else</span> {<br> d[v] = <span class="hljs-number">0x3f3f3f3f</span>;<br> }<br> }<br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>}<br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">long</span> <span class="hljs-type">long</span> <span class="hljs-title">dinic</span><span class="hljs-params">()</span> </span>{<br> <span class="hljs-type">long</span> <span class="hljs-type">long</span> sum = <span class="hljs-number">0</span>;<br> <span class="hljs-keyword">while</span>(<span class="hljs-built_in">bfs</span>()) {<br> sum += <span class="hljs-built_in">dfs</span>(s, <span class="hljs-number">0x7fffffff</span>);<br> }<br> <span class="hljs-keyword">return</span> sum;<br>}<br><br><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{<br><br> cin >> n >> m >> s >> t;<br><br> <span class="hljs-keyword">while</span>(m--) {<br> <span class="hljs-type">long</span> <span class="hljs-type">long</span> u, v, c;<br> cin >> u >> v >> c;<br> <span class="hljs-built_in">add</span>(u, v, c);<br> }<br><br> cout << <span class="hljs-built_in">dinic</span>() << endl;<br><br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>}<br></code></pre></td></tr></table></figure><h2 id="KMP-算法"><a href="#KMP-算法" class="headerlink" title=" $KMP$ $算法$ "></a><span id="jump9"> $KMP$ $算法$ </span></h2><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-meta">#<span class="hljs-keyword">include</span> <span class="hljs-string"><bits/stdc++.h></span></span><br><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> N 1000001</span><br><br><span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> std;<br><br><span class="hljs-type">char</span> s1[N], s2[N];<br><span class="hljs-type">int</span> la, lb;<br><span class="hljs-type">int</span> j = <span class="hljs-number">0</span>;<br><span class="hljs-type">int</span> kmp[N];<br><br><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{<br> cin >> s1 + <span class="hljs-number">1</span>;<br> cin >> s2 + <span class="hljs-number">1</span>;<br><br> la = <span class="hljs-built_in">strlen</span>(s1 + <span class="hljs-number">1</span>);<br> lb = <span class="hljs-built_in">strlen</span>(s2 + <span class="hljs-number">1</span>);<br><br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i <= lb; ++i) {<br> <span class="hljs-keyword">while</span>(j && s2[i + <span class="hljs-number">1</span>] != s2[j + <span class="hljs-number">1</span>]) {<br> j = kmp[j];<br> }<br> <span class="hljs-keyword">if</span>(s2[i + <span class="hljs-number">1</span>] == s2[j + <span class="hljs-number">1</span>]) {<br> ++j;<br> kmp[i + <span class="hljs-number">1</span>] = j;<br> }<br> }<br><br> j = <span class="hljs-number">0</span>;<br><br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i <= la; ++i) {<br> <span class="hljs-keyword">while</span>(j && s1[i] != s2[j + <span class="hljs-number">1</span>]) {<br> j = kmp[j];<br> }<br> <span class="hljs-keyword">if</span>(s1[i] == s2[j + <span class="hljs-number">1</span>]) {<br> ++j;<br> }<br> <span class="hljs-keyword">if</span>(j == lb) {<br> cout << i - lb + <span class="hljs-number">1</span> << endl;<br> j = kmp[j];<br> }<br> }<br><br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i <= lb; ++i) {<br> cout << kmp[i] << <span class="hljs-string">' '</span>;<br> }<br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>}<br></code></pre></td></tr></table></figure>]]></content>
</entry>
</search>