-
Notifications
You must be signed in to change notification settings - Fork 0
/
atom.xml
475 lines (283 loc) · 248 KB
/
atom.xml
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>蒟蒻sxy的blog</title>
<link href="/atom.xml" rel="self"/>
<link href="http://www.sxyoi.cn/"/>
<updated>2020-02-24T07:47:09.732Z</updated>
<id>http://www.sxyoi.cn/</id>
<author>
<name>sxy</name>
</author>
<generator uri="http://hexo.io/">Hexo</generator>
<entry>
<title>Java入门反思</title>
<link href="http://www.sxyoi.cn/2020/02/23/%E6%96%B0%E7%94%9F/"/>
<id>http://www.sxyoi.cn/2020/02/23/新生/</id>
<published>2020-02-23T05:13:18.000Z</published>
<updated>2020-02-24T07:47:09.732Z</updated>
<content type="html"><![CDATA[<p>这几天被疫情困在家里</p><p>于是乎看了一下Java</p><p>感觉Java最不同于我之前学OI的时候的学的编程的地方就是面向对象的这种方式</p><p>也需要花更多的时间来想怎么能提高代码的可维护性,比如避免多个类用到的变量冲突、文件目录等等</p><p>但纸上得来终觉浅,还是要多实际操作一下,不然总是会觉得某些实际上挺有用的东西十分冗余,同时多看一些优秀的开源项目,学习他们优秀的地方</p>]]></content>
<summary type="html">
<p>这几天被疫情困在家里</p>
<p>于是乎看了一下Java</p>
<p>感觉Java最不同于我之前学OI的时候的学的编程的地方就是面向对象的这种方式</p>
<p>也需要花更多的时间来想怎么能提高代码的可维护性,比如避免多个类用到的变量冲突、文件目录等等</p>
<p>但
</summary>
<category term="Java" scheme="http://www.sxyoi.cn/tags/Java/"/>
</entry>
<entry>
<title>【JLOI2011】飞行路线</title>
<link href="http://www.sxyoi.cn/2018/11/08/%5BJLOI2011%5D%E9%A3%9E%E8%A1%8C%E8%B7%AF%E7%BA%BF/"/>
<id>http://www.sxyoi.cn/2018/11/08/[JLOI2011]飞行路线/</id>
<published>2018-11-08T15:52:00.000Z</published>
<updated>2018-11-08T15:58:06.698Z</updated>
<content type="html"><![CDATA[<p><a href="https://www.luogu.org/problemnew/show/P4568" target="_blank" rel="noopener">题目链接</a></p><a id="more"></a><h2>sol</h2><p>dp+dijkstra(大概吧,但是感觉就只是堆优化spfa,但是都说这也是dijkstra,而且想了一下这样好像还能处理负权图,但是不知道时间复杂度是不是能优化?)</p><p>dis[i]/[j]表示到i点用了j次免费机票的最短距离</p><p>然后堆的元素是这样的</p><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></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">Node</span>{</span></span><br><span class="line"> <span class="keyword">int</span> num,k;</span><br><span class="line"> <span class="keyword">bool</span> <span class="keyword">operator</span><(<span class="keyword">const</span> Node&b)<span class="keyword">const</span></span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">return</span> dis[num][k]>dis[b.num][b.k];</span><br><span class="line"> }</span><br><span class="line">};</span><br></pre></td></tr></table></figure><p>num是点的序号,k是用了多少次免费机票</p><p>其实好像可以拆成多个点。。。一样的。。。反正最后跑下来挺快的。。。其实还是一道比较简单的省选题。。。luogu评分真的是不敢恭维啊。。。</p><p>大概是最后一次这样写题解了吧,oi生涯还真是短暂啊</p><p>回忆录就等考完再写吧(虽然我这么菜也没什么好回忆的</p><h2>Code</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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstring></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstdio></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cmath></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><algorithm></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><queue></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> MAXN 10010</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> MAXM 100010</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> rep(i,l,r) for(int i=l;i<=r;++i)</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> per(i,l,r) for(int i=l;i>=r;--i)</span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">int</span> <span class="title">read</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">char</span> c;</span><br><span class="line"> <span class="keyword">bool</span> t=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">int</span> a=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">while</span>((c=getchar())==<span class="string">' '</span>||c==<span class="string">'\n'</span>||c==<span class="string">'\r'</span>);</span><br><span class="line"> <span class="keyword">if</span>(c==<span class="string">'-'</span>)</span><br><span class="line"> {</span><br><span class="line"> t=<span class="number">1</span>;c=getchar();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">while</span>(c>=<span class="string">'0'</span>&&c<=<span class="string">'9'</span>)</span><br><span class="line"> {</span><br><span class="line"> a*=<span class="number">10</span>;a+=(c-<span class="string">'0'</span>);c=getchar();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> a*(t?<span class="number">-1</span>:<span class="number">1</span>);</span><br><span class="line">}</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">Edge</span>{</span></span><br><span class="line"> <span class="keyword">int</span> to,next,v;</span><br><span class="line">}e[MAXM];</span><br><span class="line"><span class="keyword">int</span> last[MAXN],dis[MAXN][<span class="number">11</span>],cnt,n,m,k,s,t;</span><br><span class="line"><span class="keyword">bool</span> inq[MAXN][<span class="number">11</span>];</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">Node</span>{</span></span><br><span class="line"> <span class="keyword">int</span> num,k;</span><br><span class="line"> <span class="keyword">bool</span> <span class="keyword">operator</span><(<span class="keyword">const</span> Node&b)<span class="keyword">const</span></span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">return</span> dis[num][k]>dis[b.num][b.k];</span><br><span class="line"> }</span><br><span class="line">}; </span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">void</span> <span class="title">add</span><span class="params">(<span class="keyword">const</span> <span class="keyword">int</span> &from,<span class="keyword">const</span> <span class="keyword">int</span> &to,<span class="keyword">const</span> <span class="keyword">int</span> &v)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> e[++cnt].next=last[from];</span><br><span class="line"> last[from]=cnt;</span><br><span class="line"> e[cnt].to=to;</span><br><span class="line"> e[cnt].v=v;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">dijkstra</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> Node u;</span><br><span class="line"> <span class="keyword">long</span> <span class="keyword">long</span> ans=<span class="number">-1</span>;</span><br><span class="line"> <span class="keyword">int</span> tk,temp;</span><br><span class="line"> <span class="keyword">bool</span> tag;</span><br><span class="line"> priority_queue<Node> q;</span><br><span class="line"> rep(i,<span class="number">0</span>,n)</span><br><span class="line"> rep(j,<span class="number">0</span>,k)</span><br><span class="line"> dis[i][j]=<span class="number">-1</span>;</span><br><span class="line"> dis[s][<span class="number">0</span>]=<span class="number">0</span>;</span><br><span class="line"> q.push((Node){s,<span class="number">0</span>});</span><br><span class="line"> inq[s][<span class="number">0</span>]=<span class="number">1</span>;</span><br><span class="line"> <span class="keyword">while</span>(!q.empty())</span><br><span class="line"> {</span><br><span class="line"> u=q.top();q.pop();</span><br><span class="line"> temp=last[u.num];</span><br><span class="line"> <span class="keyword">while</span>(temp)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(dis[u.num][u.k]+e[temp].v<dis[e[temp].to][u.k]||dis[e[temp].to][u.k]<<span class="number">0</span>)</span><br><span class="line"> {</span><br><span class="line"> dis[e[temp].to][u.k]=dis[u.num][u.k]+e[temp].v;</span><br><span class="line"> <span class="keyword">if</span>(!inq[e[temp].to][u.k])</span><br><span class="line"> {</span><br><span class="line"> q.push((Node){e[temp].to,u.k});</span><br><span class="line"> inq[e[temp].to][u.k]=<span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span>(u.k+<span class="number">1</span><=k&&(dis[u.num][u.k]<dis[e[temp].to][u.k+<span class="number">1</span>]||dis[e[temp].to][u.k+<span class="number">1</span>]<<span class="number">0</span>))</span><br><span class="line"> {</span><br><span class="line"> dis[e[temp].to][u.k+<span class="number">1</span>]=dis[u.num][u.k];</span><br><span class="line"> <span class="keyword">if</span>(!inq[e[temp].to][u.k+<span class="number">1</span>])</span><br><span class="line"> {</span><br><span class="line"> q.push((Node){e[temp].to,u.k+<span class="number">1</span>});</span><br><span class="line"> inq[e[temp].to][u.k+<span class="number">1</span>]=<span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> temp=e[temp].next;</span><br><span class="line"> }</span><br><span class="line"> inq[u.num][u.k]=<span class="number">0</span>;</span><br><span class="line"> }</span><br><span class="line"> rep(i,<span class="number">0</span>,k)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(dis[t][i]<<span class="number">0</span>)</span><br><span class="line"> <span class="keyword">break</span>;</span><br><span class="line"> <span class="keyword">if</span>(dis[t][i]<ans||ans<<span class="number">0</span>)</span><br><span class="line"> ans=dis[t][i];</span><br><span class="line"> }</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">"%d"</span>,ans);</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">int</span> tx,ty,tz;</span><br><span class="line"> n=read();m=read();k=read();</span><br><span class="line"> s=read();t=read();</span><br><span class="line"> rep(i,<span class="number">1</span>,m)</span><br><span class="line"> {</span><br><span class="line"> tx=read();ty=read();tz=read();</span><br><span class="line"> add(tx,ty,tz);add(ty,tx,tz);</span><br><span class="line"> }</span><br><span class="line"> dijkstra();</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<p><a href="https://www.luogu.org/problemnew/show/P4568" target="_blank" rel="noopener">题目链接</a></p>
</summary>
<category term="动态规划" scheme="http://www.sxyoi.cn/tags/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92/"/>
<category term="最短路" scheme="http://www.sxyoi.cn/tags/%E6%9C%80%E7%9F%AD%E8%B7%AF/"/>
</entry>
<entry>
<title>纪念品分组</title>
<link href="http://www.sxyoi.cn/2018/11/08/%E7%BA%AA%E5%BF%B5%E5%93%81%E5%88%86%E7%BB%84/"/>
<id>http://www.sxyoi.cn/2018/11/08/纪念品分组/</id>
<published>2018-11-08T15:51:00.000Z</published>
<updated>2018-11-08T15:52:52.345Z</updated>
<content type="html"><![CDATA[<p><a href="https://www.luogu.org/problemnew/show/P1094" target="_blank" rel="noopener">题目链接</a></p><a id="more"></a><h2>sol</h2><p>尽量把大的和小的放一起,先放大的后放小的,两个指针向中间移动</p><h2>Code</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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstring></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstdio></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cmath></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><algorithm></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><queue></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><stack></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> rep(i,l,r) for(int i=l;i<=r;++i)</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> per(i,l,r) for(int i=l;i>=r;--i)</span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="keyword">int</span> w,n,p[<span class="number">30010</span>];</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">int</span> l,r,temp,ans=<span class="number">0</span>;</span><br><span class="line"> <span class="built_in">scanf</span>(<span class="string">"%d%d"</span>,&w,&n);</span><br><span class="line"> l=<span class="number">1</span>,r=n;</span><br><span class="line"> rep(i,<span class="number">1</span>,n)<span class="built_in">scanf</span>(<span class="string">"%d"</span>,&p[i]);</span><br><span class="line"> sort(p+<span class="number">1</span>,p+n+<span class="number">1</span>);</span><br><span class="line"> <span class="keyword">while</span>(l<=r)</span><br><span class="line"> {</span><br><span class="line"> ++ans;</span><br><span class="line"> temp=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">while</span>(r>=l&&temp+p[r]<=w)</span><br><span class="line"> temp+=p[r--];</span><br><span class="line"> <span class="keyword">while</span>(l<=r&&temp+p[l]<=w)</span><br><span class="line"> temp+=p[l++];</span><br><span class="line"> }</span><br><span class="line"> <span class="built_in">cout</span><<ans;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<p><a href="https://www.luogu.org/problemnew/show/P1094" target="_blank" rel="noopener">题目链接</a></p>
</summary>
<category term="贪心" scheme="http://www.sxyoi.cn/tags/%E8%B4%AA%E5%BF%83/"/>
</entry>
<entry>
<title>转圈游戏</title>
<link href="http://www.sxyoi.cn/2018/11/08/%E8%BD%AC%E5%9C%88%E6%B8%B8%E6%88%8F/"/>
<id>http://www.sxyoi.cn/2018/11/08/转圈游戏/</id>
<published>2018-11-08T15:48:00.000Z</published>
<updated>2018-11-08T15:50:28.073Z</updated>
<content type="html"><![CDATA[<p><a href="https://www.luogu.org/problemnew/show/P1965" target="_blank" rel="noopener">题目链接</a></p><a id="more"></a><h2>sol</h2><p>直接快速幂+取模。。。没什么好说的</p><h2>Code</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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstring></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstdio></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cmath></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><algorithm></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><queue></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><stack></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="keyword">int</span> n,m,k,x;</span><br><span class="line"><span class="function"><span class="keyword">long</span> <span class="keyword">long</span> <span class="title">f_pow</span><span class="params">(<span class="keyword">long</span> <span class="keyword">long</span> x,<span class="keyword">long</span> <span class="keyword">long</span> k)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">long</span> <span class="keyword">long</span> ans=<span class="number">1</span>;</span><br><span class="line"> <span class="keyword">while</span>(k)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(k&<span class="number">1</span>)</span><br><span class="line"> {</span><br><span class="line"> ans*=x;</span><br><span class="line"> ans%=n;</span><br><span class="line"> }</span><br><span class="line"> x*=x;</span><br><span class="line"> x%=n;</span><br><span class="line"> k>>=<span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> ans;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="built_in">scanf</span>(<span class="string">"%d%d%d%d"</span>,&n,&m,&k,&x);</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">"%lld"</span>,(x+<span class="number">1L</span>L*f_pow(<span class="number">10</span>,k)*m)%n);</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<p><a href="https://www.luogu.org/problemnew/show/P1965" target="_blank" rel="noopener">题目链接</a></p>
</summary>
<category term="快速幂" scheme="http://www.sxyoi.cn/tags/%E5%BF%AB%E9%80%9F%E5%B9%82/"/>
</entry>
<entry>
<title>【USACO08JAN】电话线Telephone Lines</title>
<link href="http://www.sxyoi.cn/2018/11/08/%5BUSACO08JAN%5D%E7%94%B5%E8%AF%9D%E7%BA%BFTelephone%20Lines/"/>
<id>http://www.sxyoi.cn/2018/11/08/[USACO08JAN]电话线Telephone Lines/</id>
<published>2018-11-08T15:38:00.000Z</published>
<updated>2018-11-08T15:47:30.324Z</updated>
<content type="html"><![CDATA[<p><a href="https://www.luogu.org/problemnew/show/P1948" target="_blank" rel="noopener">题目链接</a></p><a id="more"></a><h2>sol</h2><p>一开始看错题了。。。消费为路径上的最大值。。。所以没有想二分答案。。。</p><h3>1.</h3><p>免费连k条相当于把k条权值变成0</p><p>显然每个点的dis可以这样记录:</p><p>dis[i]/[j]表示到点i消掉了j条边</p><p>然后跑最短路,dis按题目要求来就好了</p><p>应该是动态规划吧。。。</p><p>其实我这个松弛还可以优化一下,具体可以看飞行路线那题,每个点没必要每次把所有的0~k都松弛一遍,只需要松弛被松弛的就行了</p><h3>2.</h3><p>二分答案+spfa</p><p>因为消耗是路径上的边权最大值,所以是可以二分答案的</p><p>judge的时候转换一下,把所有边权大于maxx的边权值设为1,不大于maxx的边权值设为0</p><p>然后跑一边spfa,看dis[n]是不是小于等于k即可</p><p>一开始的左边界设错了。。。二分的左边界应该一直是0,我设置为了最小边权,然后就在bzoj上一直wa,但是luogu上可a。。。数据水?</p><h2>Code</h2><h2>Code</h2><h3>1.</h3><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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstring></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstdio></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cmath></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><queue></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><algorithm></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> rep(i,l,r) for(int i=l;i<=r;++i)</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> per(i,l,r) for(int i=l;i>=r;--i)</span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">int</span> <span class="title">read</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">char</span> c;</span><br><span class="line"> <span class="keyword">bool</span> t=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">int</span> a=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">while</span>((c=getchar())==<span class="string">' '</span>||c==<span class="string">'\n'</span>||c==<span class="string">'\r'</span>);</span><br><span class="line"> <span class="keyword">if</span>(c==<span class="string">'-'</span>)</span><br><span class="line"> {</span><br><span class="line"> t=<span class="number">1</span>;c=getchar();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">while</span>(c>=<span class="string">'0'</span>&&c<=<span class="string">'9'</span>)</span><br><span class="line"> {</span><br><span class="line"> a*=<span class="number">10</span>;a+=(c-<span class="string">'0'</span>);c=getchar();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> a*(t?<span class="number">-1</span>:<span class="number">1</span>);</span><br><span class="line">}</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">Edge</span>{</span></span><br><span class="line"> <span class="keyword">int</span> to,next,v;</span><br><span class="line">}e[<span class="number">20001</span>];</span><br><span class="line"><span class="built_in">queue</span><<span class="keyword">int</span>> q;</span><br><span class="line"><span class="keyword">long</span> <span class="keyword">long</span> dis[<span class="number">1001</span>][<span class="number">10001</span>],ans=<span class="number">-1</span>;</span><br><span class="line"><span class="keyword">int</span> last[<span class="number">1001</span>],n,p,k,cnt;</span><br><span class="line"><span class="keyword">bool</span> inq[<span class="number">1001</span>];</span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">long</span> <span class="keyword">long</span> <span class="title">max</span><span class="params">(<span class="keyword">const</span> <span class="keyword">int</span> &a,<span class="keyword">const</span> <span class="keyword">int</span> &b)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">return</span> a>b?a:b;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">void</span> <span class="title">add</span><span class="params">(<span class="keyword">const</span> <span class="keyword">int</span> &from,<span class="keyword">const</span> <span class="keyword">int</span> &to,<span class="keyword">const</span> <span class="keyword">int</span> &v)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> e[++cnt].next=last[from];</span><br><span class="line"> last[from]=cnt;</span><br><span class="line"> e[cnt].to=to;</span><br><span class="line"> e[cnt].v=v;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">int</span> tx,ty,tz,temp,u;</span><br><span class="line"> <span class="keyword">bool</span> tag;</span><br><span class="line"> n=read();p=read();k=read();</span><br><span class="line"> rep(i,<span class="number">1</span>,p)</span><br><span class="line"> {</span><br><span class="line"> tx=read();ty=read();tz=read();</span><br><span class="line"> add(tx,ty,tz);</span><br><span class="line"> add(ty,tx,tz);</span><br><span class="line"> }</span><br><span class="line"> rep(i,<span class="number">1</span>,n)</span><br><span class="line"> rep(j,<span class="number">0</span>,k)</span><br><span class="line"> dis[i][j]=<span class="number">-1</span>;</span><br><span class="line"> dis[<span class="number">1</span>][<span class="number">0</span>]=<span class="number">0</span>;</span><br><span class="line"> inq[<span class="number">1</span>]=<span class="number">1</span>;</span><br><span class="line"> q.push(<span class="number">1</span>);</span><br><span class="line"> <span class="keyword">while</span>(!q.empty())<span class="comment">//这里可以优化,但是空间消耗会大一点,具体可见飞行路线</span></span><br><span class="line"> {</span><br><span class="line"> u=q.front();q.pop();</span><br><span class="line"> rep(i,<span class="number">0</span>,k)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(dis[u][i]<<span class="number">0</span>)</span><br><span class="line"> <span class="keyword">break</span>;</span><br><span class="line"> temp=last[u];</span><br><span class="line"> <span class="keyword">while</span>(temp)</span><br><span class="line"> {</span><br><span class="line"> tag=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">if</span>(dis[e[temp].to][i]<<span class="number">0</span>||max(dis[u][i],e[temp].v)<dis[e[temp].to][i])</span><br><span class="line"> {</span><br><span class="line"> dis[e[temp].to][i]=max(dis[u][i],e[temp].v);</span><br><span class="line"> tag=<span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span>(i+<span class="number">1</span><=k&&(dis[e[temp].to][i+<span class="number">1</span>]<<span class="number">0</span>||dis[u][i]<dis[e[temp].to][i+<span class="number">1</span>]))</span><br><span class="line"> {</span><br><span class="line"> dis[e[temp].to][i+<span class="number">1</span>]=dis[u][i];</span><br><span class="line"> tag=<span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span>(tag&&!inq[e[temp].to])</span><br><span class="line"> {</span><br><span class="line"> inq[e[temp].to]=<span class="number">1</span>;</span><br><span class="line"> q.push(e[temp].to);</span><br><span class="line"> }</span><br><span class="line"> temp=e[temp].next;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> inq[u]=<span class="number">0</span>;</span><br><span class="line"> }</span><br><span class="line"> rep(i,<span class="number">0</span>,k)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(dis[n][i]<<span class="number">0</span>)</span><br><span class="line"> <span class="keyword">continue</span>;</span><br><span class="line"> <span class="keyword">if</span>(ans<<span class="number">0</span>)</span><br><span class="line"> ans=dis[n][i];</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> ans=min(ans,dis[n][i]);</span><br><span class="line"> }</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">"%lld"</span>,ans);</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h3>2.</h3><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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstring></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstdio></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cmath></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><queue></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><algorithm></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> rep(i,l,r) for(int i=l;i<=r;++i)</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> per(i,l,r) for(int i=l;i>=r;--i)</span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">int</span> <span class="title">read</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">char</span> c;</span><br><span class="line"> <span class="keyword">bool</span> t=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">int</span> a=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">while</span>((c=getchar())==<span class="string">' '</span>||c==<span class="string">'\n'</span>||c==<span class="string">'\r'</span>);</span><br><span class="line"> <span class="keyword">if</span>(c==<span class="string">'-'</span>)</span><br><span class="line"> {</span><br><span class="line"> t=<span class="number">1</span>;c=getchar();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">while</span>(c>=<span class="string">'0'</span>&&c<=<span class="string">'9'</span>)</span><br><span class="line"> {</span><br><span class="line"> a*=<span class="number">10</span>;a+=(c-<span class="string">'0'</span>);c=getchar();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> a*(t?<span class="number">-1</span>:<span class="number">1</span>);</span><br><span class="line">}</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">Edge</span>{</span></span><br><span class="line"> <span class="keyword">int</span> to,next,v,v_sb;</span><br><span class="line">}e[<span class="number">20001</span>];</span><br><span class="line"><span class="keyword">int</span> n,p,k,last[<span class="number">1001</span>],cnt,dis[<span class="number">1001</span>];</span><br><span class="line"><span class="keyword">bool</span> inq[<span class="number">1001</span>];</span><br><span class="line"><span class="built_in">queue</span><<span class="keyword">int</span>> q;</span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">void</span> <span class="title">add</span><span class="params">(<span class="keyword">const</span> <span class="keyword">int</span> &from,<span class="keyword">const</span> <span class="keyword">int</span> &to,<span class="keyword">const</span> <span class="keyword">int</span> &v)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> e[++cnt].next=last[from];</span><br><span class="line"> last[from]=cnt;</span><br><span class="line"> e[cnt].to=to;</span><br><span class="line"> e[cnt].v_sb=v;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">bool</span> <span class="title">judge</span><span class="params">(<span class="keyword">int</span> maxx)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">int</span> temp,u;</span><br><span class="line"> rep(i,<span class="number">2</span>,n)</span><br><span class="line"> dis[i]=<span class="number">-1</span>;</span><br><span class="line"> rep(i,<span class="number">1</span>,cnt)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(e[i].v_sb>maxx)</span><br><span class="line"> e[i].v=<span class="number">1</span>;</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> e[i].v=<span class="number">0</span>;</span><br><span class="line"> }</span><br><span class="line"> dis[<span class="number">1</span>]=<span class="number">0</span>;</span><br><span class="line"> inq[<span class="number">1</span>]=<span class="number">1</span>;</span><br><span class="line"> q.push(<span class="number">1</span>);</span><br><span class="line"> <span class="keyword">while</span>(!q.empty())</span><br><span class="line"> {</span><br><span class="line"> u=q.front();q.pop();</span><br><span class="line"> <span class="comment">/*if(dis[u]>k)</span></span><br><span class="line"><span class="comment"> {</span></span><br><span class="line"><span class="comment"> inq[u]=0;</span></span><br><span class="line"><span class="comment"> continue;</span></span><br><span class="line"><span class="comment"> }*/</span><span class="comment">//sb的负优化,耗时还多了4ms</span></span><br><span class="line"> temp=last[u];</span><br><span class="line"> <span class="keyword">while</span>(temp)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(dis[e[temp].to]<<span class="number">0</span>||dis[u]+e[temp].v<dis[e[temp].to])</span><br><span class="line"> {</span><br><span class="line"> dis[e[temp].to]=dis[u]+e[temp].v;</span><br><span class="line"> <span class="keyword">if</span>(!inq[e[temp].to])</span><br><span class="line"> {</span><br><span class="line"> inq[e[temp].to]=<span class="number">1</span>;</span><br><span class="line"> q.push(e[temp].to);</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> temp=e[temp].next;</span><br><span class="line"> }</span><br><span class="line"> inq[u]=<span class="number">0</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span>(dis[n]>=<span class="number">0</span>&&dis[n]<=k)</span><br><span class="line"> <span class="keyword">return</span> <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">int</span> tx,ty,tz,l=<span class="number">0</span>,r=<span class="number">1</span>,mid,ans;</span><br><span class="line"> n=read();p=read();k=read();</span><br><span class="line"> rep(i,<span class="number">1</span>,p)</span><br><span class="line"> {</span><br><span class="line"> tx=read();ty=read();tz=read();</span><br><span class="line"> r=max(r,tz);</span><br><span class="line"> add(tx,ty,tz);</span><br><span class="line"> add(ty,tx,tz);</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span>(!judge(r))</span><br><span class="line"> {</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">"-1"</span>);</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">while</span>(l<=r)</span><br><span class="line"> {</span><br><span class="line"> mid=l+((r-l)>><span class="number">1</span>);</span><br><span class="line"> <span class="keyword">if</span>(judge(mid))</span><br><span class="line"> {</span><br><span class="line"> ans=mid;</span><br><span class="line"> r=mid<span class="number">-1</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> l=mid+<span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">"%d"</span>,ans);</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<p><a href="https://www.luogu.org/problemnew/show/P1948" target="_blank" rel="noopener">题目链接</a></p>
</summary>
<category term="动态规划" scheme="http://www.sxyoi.cn/tags/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92/"/>
<category term="二分答案" scheme="http://www.sxyoi.cn/tags/%E4%BA%8C%E5%88%86%E7%AD%94%E6%A1%88/"/>
<category term="最短路" scheme="http://www.sxyoi.cn/tags/%E6%9C%80%E7%9F%AD%E8%B7%AF/"/>
</entry>
<entry>
<title>银河英雄传说</title>
<link href="http://www.sxyoi.cn/2018/11/08/%E9%93%B6%E6%B2%B3%E8%8B%B1%E9%9B%84%E4%BC%A0%E8%AF%B4/"/>
<id>http://www.sxyoi.cn/2018/11/08/银河英雄传说/</id>
<published>2018-11-08T15:35:00.000Z</published>
<updated>2018-11-08T15:38:11.326Z</updated>
<content type="html"><![CDATA[<p><a href="https://www.luogu.org/problemnew/show/P1196" target="_blank" rel="noopener">题目链接</a></p><a id="more"></a><h2>sol</h2><p>跟叠积木差不多,就是询问的时候输出两个权值相减而已</p><h2>Code</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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstring></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstdio></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cmath></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><algorithm></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> rep(i,l,r) for(int i=l;i<=r;++i)</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> per(i,l,r) for(int i=l;i>=r;--i)</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> MAXN 30010</span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">int</span> <span class="title">read</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">char</span> c;</span><br><span class="line"> <span class="keyword">int</span> a=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">while</span>((c=getchar())==<span class="string">' '</span>||c==<span class="string">'\n'</span>||c==<span class="string">'\r'</span>);</span><br><span class="line"> <span class="keyword">while</span>(c>=<span class="string">'0'</span>&&c<=<span class="string">'9'</span>)</span><br><span class="line"> {</span><br><span class="line"> a*=<span class="number">10</span>;a+=(c-<span class="string">'0'</span>);c=getchar();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> a;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">int</span> a[MAXN],b[MAXN],v[MAXN];<span class="comment">//top , bottom , value</span></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">finda</span><span class="params">(<span class="keyword">int</span> x)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">if</span>(!a[x])</span><br><span class="line"> <span class="keyword">return</span> x;</span><br><span class="line"> finda(a[x]);</span><br><span class="line"> v[x]+=v[a[x]];</span><br><span class="line"> <span class="keyword">return</span> a[x]=finda(a[x]);</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">findb</span><span class="params">(<span class="keyword">int</span> x)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">return</span> b[x]?b[x]=findb(b[x]):x;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">char</span> c;</span><br><span class="line"> <span class="keyword">int</span> tx,ty;</span><br><span class="line"> <span class="keyword">int</span> T=read();</span><br><span class="line"> <span class="keyword">while</span>(T--)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">while</span>((c=getchar())==<span class="string">' '</span>||c==<span class="string">'\n'</span>||c==<span class="string">'\r'</span>);</span><br><span class="line"> tx=read();ty=read();</span><br><span class="line"> <span class="keyword">if</span>(c==<span class="string">'M'</span>)<span class="comment">//merge</span></span><br><span class="line"> {</span><br><span class="line"> tx=finda(tx);ty=findb(ty);</span><br><span class="line"> v[tx]=<span class="number">1</span>;</span><br><span class="line"> a[tx]=ty;</span><br><span class="line"> b[ty]=findb(tx);</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span>(c==<span class="string">'C'</span>)<span class="comment">//query</span></span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(finda(tx)!=finda(ty))</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">"-1\n"</span>);</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">"%d\n"</span>,<span class="built_in">abs</span>(v[tx]-v[ty])<span class="number">-1</span>);</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<p><a href="https://www.luogu.org/problemnew/show/P1196" target="_blank" rel="noopener">题目链接</a></p>
</summary>
<category term="并查集" scheme="http://www.sxyoi.cn/tags/%E5%B9%B6%E6%9F%A5%E9%9B%86/"/>
<category term="带权并查集" scheme="http://www.sxyoi.cn/tags/%E5%B8%A6%E6%9D%83%E5%B9%B6%E6%9F%A5%E9%9B%86/"/>
</entry>
<entry>
<title>路径统计</title>
<link href="http://www.sxyoi.cn/2018/11/07/%E8%B7%AF%E5%BE%84%E7%BB%9F%E8%AE%A1/"/>
<id>http://www.sxyoi.cn/2018/11/07/路径统计/</id>
<published>2018-11-06T16:40:00.000Z</published>
<updated>2018-11-06T16:46:24.228Z</updated>
<content type="html"><![CDATA[<p><a href="https://www.luogu.org/problemnew/show/P1608" target="_blank" rel="noopener">题目链接</a></p><a id="more"></a><h2>sol</h2><p>有点类似最短路计数那道题。。。</p><p>主要问题有两个:去重边,统计最短路条数</p><p>前一个比较好搞,后一个在spfa的时候改一下松弛操作就行了</p><p>但是要在每一个元素出队时将其计数器清零,否则会被以下数据×掉</p><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">5 5</span><br><span class="line">1 2 1</span><br><span class="line">2 3 1</span><br><span class="line">3 4 1</span><br><span class="line">4 5 1</span><br><span class="line">1 4 3</span><br></pre></td></tr></table></figure><p>因为这组数据如果不清零4会入队两次, 第一次是1->4 (v=3,dis=3,path=1)</p><p>然后4->5 (v=1,dis=4,path=1)</p><p>第二次是3->4(v=1,dis=3,path=1+1)</p><p>然后4->5(v=1,dis=4,path=1+2)</p><p>然后就会输出</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">4 3</span><br></pre></td></tr></table></figure><p>实际是</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">4 2</span><br></pre></td></tr></table></figure><h2>Code</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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstring></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstdio></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cmath></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><queue></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><algorithm></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> rep(i,l,r) for(int i=l;i<=r;++i)</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> per(i,l,r) for(int i=l;i>=r;--i)</span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">int</span> <span class="title">read</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">char</span> c;</span><br><span class="line"> <span class="keyword">bool</span> t=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">int</span> a=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">while</span>((c=getchar())==<span class="string">' '</span>||c==<span class="string">'\n'</span>||c==<span class="string">'\r'</span>);</span><br><span class="line"> <span class="keyword">if</span>(c==<span class="string">'-'</span>)</span><br><span class="line"> {</span><br><span class="line"> t=<span class="number">1</span>;c=getchar();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">while</span>(c>=<span class="string">'0'</span>&&c<=<span class="string">'9'</span>)</span><br><span class="line"> {</span><br><span class="line"> a*=<span class="number">10</span>;a+=(c-<span class="string">'0'</span>);c=getchar();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> a*(t?<span class="number">-1</span>:<span class="number">1</span>);</span><br><span class="line">}</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">Edge</span>{</span></span><br><span class="line"> <span class="keyword">int</span> to,next,v;</span><br><span class="line">}e[<span class="number">4000001</span>];</span><br><span class="line"><span class="built_in">queue</span><<span class="keyword">int</span>> q;</span><br><span class="line"><span class="keyword">int</span> n,m;</span><br><span class="line"><span class="keyword">int</span> last[<span class="number">2001</span>],cnt,dis[<span class="number">2001</span>],ee[<span class="number">2001</span>][<span class="number">2001</span>],cnt_path[<span class="number">2001</span>];</span><br><span class="line"><span class="keyword">bool</span> inq[<span class="number">2001</span>];</span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">void</span> <span class="title">add</span><span class="params">(<span class="keyword">const</span> <span class="keyword">int</span> &from,<span class="keyword">const</span> <span class="keyword">int</span> &to,<span class="keyword">const</span> <span class="keyword">int</span> &v,<span class="keyword">int</span> &num)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">if</span>(!ee[from][to])</span><br><span class="line"> {</span><br><span class="line"> ee[from][to]=v;</span><br><span class="line"> e[num].next=last[from];</span><br><span class="line"> last[from]=num;</span><br><span class="line"> e[num].to=to;</span><br><span class="line"> e[num].v=v;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span>(v<ee[from][to])</span><br><span class="line"> {</span><br><span class="line"> ee[from][to]=v;</span><br><span class="line"> e[num].next=last[from];</span><br><span class="line"> last[from]=num;</span><br><span class="line"> e[num].to=to;</span><br><span class="line"> e[num].v=v;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> {</span><br><span class="line"> --num;</span><br><span class="line"> --m;</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">int</span> tx,ty,tz,temp;</span><br><span class="line"> n=read();m=read();</span><br><span class="line"> rep(i,<span class="number">1</span>,n)dis[i]=<span class="number">-1</span>;</span><br><span class="line"> rep(i,<span class="number">1</span>,m)</span><br><span class="line"> {</span><br><span class="line"> tx=read();ty=read();tz=read();</span><br><span class="line"> add(tx,ty,tz,i);</span><br><span class="line"> }</span><br><span class="line"> cnt_path[<span class="number">1</span>]=<span class="number">1</span>;</span><br><span class="line"> dis[<span class="number">1</span>]=<span class="number">0</span>;</span><br><span class="line"> q.push(<span class="number">1</span>);</span><br><span class="line"> inq[<span class="number">1</span>]=<span class="number">1</span>;</span><br><span class="line"> <span class="keyword">while</span>(!q.empty())</span><br><span class="line"> {</span><br><span class="line"> temp=last[q.front()];</span><br><span class="line"> <span class="keyword">while</span>(temp)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(dis[e[temp].to]<<span class="number">0</span>||dis[q.front()]+e[temp].v<dis[e[temp].to])</span><br><span class="line"> {</span><br><span class="line"> dis[e[temp].to]=dis[q.front()]+e[temp].v;</span><br><span class="line"> cnt_path[e[temp].to]=cnt_path[q.front()];</span><br><span class="line"> <span class="keyword">if</span>(!inq[e[temp].to])</span><br><span class="line"> {</span><br><span class="line"> q.push(e[temp].to);</span><br><span class="line"> inq[e[temp].to]=<span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span>(dis[q.front()]+e[temp].v==dis[e[temp].to])</span><br><span class="line"> {</span><br><span class="line"> cnt_path[e[temp].to]+=cnt_path[q.front()];</span><br><span class="line"> <span class="keyword">if</span>(!inq[e[temp].to])</span><br><span class="line"> {</span><br><span class="line"> q.push(e[temp].to);</span><br><span class="line"> inq[e[temp].to]=<span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> temp=e[temp].next;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span>(q.front()!=n)</span><br><span class="line"> cnt_path[q.front()]=<span class="number">0</span>;</span><br><span class="line"> inq[q.front()]=<span class="number">0</span>;</span><br><span class="line"> q.pop();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span>(dis[n]<=<span class="number">0</span>)</span><br><span class="line"> {</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">"No answer"</span>);</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">"%d %d"</span>,dis[n],cnt_path[n]);</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<p><a href="https://www.luogu.org/problemnew/show/P1608" target="_blank" rel="noopener">题目链接</a></p>
</summary>
<category term="最短路" scheme="http://www.sxyoi.cn/tags/%E6%9C%80%E7%9F%AD%E8%B7%AF/"/>
</entry>
<entry>
<title>TJOI2007路标设置</title>
<link href="http://www.sxyoi.cn/2018/11/07/TJOI2007%E8%B7%AF%E6%A0%87%E8%AE%BE%E7%BD%AE/"/>
<id>http://www.sxyoi.cn/2018/11/07/TJOI2007路标设置/</id>
<published>2018-11-06T16:30:00.000Z</published>
<updated>2018-11-06T16:37:10.854Z</updated>
<content type="html"><![CDATA[<p><a href="https://www.luogu.org/problemnew/show/P3853" target="_blank" rel="noopener">题目链接</a></p><a id="more"></a><h2>sol</h2><p>一道比较简单的二分答案题。。。</p><p>好像和跳石头区别不大。。。直接上代码就好了。。。</p><h2>Code</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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstring></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstdio></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cmath></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><algorithm></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> rep(i,l,r) for(int i=l;i<=r;++i)</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> per(i,l,r) for(int i=l;i>=r;--i)</span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">int</span> <span class="title">read</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">char</span> c;</span><br><span class="line"> <span class="keyword">bool</span> t=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">int</span> a=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">while</span>((c=getchar())==<span class="string">' '</span>||c==<span class="string">'\n'</span>||c==<span class="string">'\r'</span>);</span><br><span class="line"> <span class="keyword">if</span>(c==<span class="string">'-'</span>)</span><br><span class="line"> {</span><br><span class="line"> t=<span class="number">1</span>;c=getchar();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">while</span>(c>=<span class="string">'0'</span>&&c<=<span class="string">'9'</span>)</span><br><span class="line"> {</span><br><span class="line"> a*=<span class="number">10</span>;a+=(c-<span class="string">'0'</span>);c=getchar();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> a*(t?<span class="number">-1</span>:<span class="number">1</span>);</span><br><span class="line">}</span><br><span class="line"><span class="keyword">int</span> l,n,k,pos[<span class="number">100001</span>],t_pos[<span class="number">100001</span>];</span><br><span class="line"><span class="function"><span class="keyword">bool</span> <span class="title">judge</span><span class="params">(<span class="keyword">int</span> maxx)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="built_in">memcpy</span>(t_pos,pos,<span class="keyword">sizeof</span> pos);</span><br><span class="line"> <span class="keyword">int</span> temp=<span class="number">0</span>;</span><br><span class="line"> rep(i,<span class="number">2</span>,n)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">while</span>(t_pos[i]-t_pos[i<span class="number">-1</span>]>maxx)</span><br><span class="line"> {</span><br><span class="line"> ++temp;</span><br><span class="line"> t_pos[i<span class="number">-1</span>]+=maxx;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span>(temp>k)</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> <span class="number">1</span>;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> l=read();n=read();k=read();</span><br><span class="line"> rep(i,<span class="number">1</span>,n)</span><br><span class="line"> pos[i]=read();</span><br><span class="line"> <span class="keyword">int</span> ll=<span class="number">1</span>,rr=l,mid,ans;</span><br><span class="line"> <span class="keyword">while</span>(ll<=rr)</span><br><span class="line"> {</span><br><span class="line"> mid=ll+((rr-ll)>><span class="number">1</span>);</span><br><span class="line"> <span class="keyword">if</span>(judge(mid))</span><br><span class="line"> {</span><br><span class="line"> ans=mid;</span><br><span class="line"> rr=mid<span class="number">-1</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> ll=mid+<span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="built_in">cout</span><<ans;</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<p><a href="https://www.luogu.org/problemnew/show/P3853" target="_blank" rel="noopener">题目链接</a></p>
</summary>
<category term="二分答案" scheme="http://www.sxyoi.cn/tags/%E4%BA%8C%E5%88%86%E7%AD%94%E6%A1%88/"/>
</entry>
<entry>
<title>叠积木</title>
<link href="http://www.sxyoi.cn/2018/11/07/%E5%8F%A0%E7%A7%AF%E6%9C%A8/"/>
<id>http://www.sxyoi.cn/2018/11/07/叠积木/</id>
<published>2018-11-06T16:11:00.000Z</published>
<updated>2018-11-06T16:22:49.753Z</updated>
<content type="html"><![CDATA[<p><a href="https://www.luogu.org/problemnew/show/P2342" target="_blank" rel="noopener">题目链接</a></p><p>一道不错的带权并查集入门题</p><a id="more"></a><h2>sol</h2><p>用两个并查集来做</p><p>a[]以积木底部的积木为根,带权,用于统计操作</p><p>b[]以积木顶部党的积木为根,不带权,用于移动操作</p><p>移动的时候,a并查集把x底部的接到y顶部的,也就是把a[x]的根接到b[y]的根上,b并查集把y顶部的接到x底部的,也就是把b[y]的根接到a[x]上</p><p>权值相应的搞一搞就行了,好像这个并不是重点?</p><p>但是权值在询问的时候应该要先finda()一下把它路径压缩一下,否则我认为可能它并没有直接连到根上,从而使得其权值并非到根的权值而只是一个到其父节点(非根)的权值</p><h2>Code</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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstring></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstdio></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cmath></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><algorithm></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> rep(i,l,r) for(int i=l;i<=r;++i)</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> per(i,l,r) for(int i=l;i>=r;--i)</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> MAXN 30001</span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">int</span> <span class="title">read</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">char</span> c;</span><br><span class="line"> <span class="keyword">bool</span> t=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">int</span> a=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">while</span>((c=getchar())==<span class="string">' '</span>||c==<span class="string">'\n'</span>||c==<span class="string">'\r'</span>);</span><br><span class="line"> <span class="keyword">if</span>(c==<span class="string">'-'</span>)</span><br><span class="line"> {</span><br><span class="line"> t=<span class="number">1</span>;c=getchar();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">while</span>(c>=<span class="string">'0'</span>&&c<=<span class="string">'9'</span>)</span><br><span class="line"> {</span><br><span class="line"> a*=<span class="number">10</span>;a+=(c-<span class="string">'0'</span>);c=getchar();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> a*(t?<span class="number">-1</span>:<span class="number">1</span>);</span><br><span class="line">}</span><br><span class="line"><span class="keyword">int</span> a[MAXN],b[MAXN],v[MAXN];<span class="comment">//bottom , top , value</span></span><br><span class="line"><span class="keyword">int</span> ans;</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">finda</span><span class="params">(<span class="keyword">int</span> x)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">if</span>(a[x])</span><br><span class="line"> {</span><br><span class="line"> a[x]=finda(a[x]);</span><br><span class="line"> ans+=v[x];</span><br><span class="line"> v[x]=ans;</span><br><span class="line"> <span class="keyword">return</span> a[x];</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> <span class="keyword">return</span> x;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">findb</span><span class="params">(<span class="keyword">int</span> x)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">return</span> b[x]?b[x]=findb(b[x]):x;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">merge</span><span class="params">(<span class="keyword">int</span> from,<span class="keyword">int</span> to)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> to=findb(to);</span><br><span class="line"> from=finda(from);</span><br><span class="line"> v[from]=<span class="number">1</span>;</span><br><span class="line"> a[from]=to;</span><br><span class="line"> b[to]=from;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">char</span> c;</span><br><span class="line"> <span class="keyword">int</span> p,tx,ty;</span><br><span class="line"> p=read();</span><br><span class="line"> rep(k,<span class="number">1</span>,p)</span><br><span class="line"> {</span><br><span class="line"> ans=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">while</span>((c=getchar())==<span class="string">' '</span>||c==<span class="string">'\n'</span>||c==<span class="string">'\r'</span>);</span><br><span class="line"> <span class="keyword">if</span>(c==<span class="string">'C'</span>)<span class="comment">//query</span></span><br><span class="line"> {</span><br><span class="line"> tx=read();</span><br><span class="line"> finda(tx);</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">"%d\n"</span>,ans);</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">else</span><span class="comment">//move</span></span><br><span class="line"> {</span><br><span class="line"> tx=read();ty=read();</span><br><span class="line"> merge(tx,ty);</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<p><a href="https://www.luogu.org/problemnew/show/P2342" target="_blank" rel="noopener">题目链接</a></p>
<p>一道不错的带权并查集入门题</p>
</summary>
<category term="并查集" scheme="http://www.sxyoi.cn/tags/%E5%B9%B6%E6%9F%A5%E9%9B%86/"/>
<category term="带权并查集" scheme="http://www.sxyoi.cn/tags/%E5%B8%A6%E6%9D%83%E5%B9%B6%E6%9F%A5%E9%9B%86/"/>
</entry>
<entry>
<title>关押罪犯</title>
<link href="http://www.sxyoi.cn/2018/11/06/%E5%85%B3%E6%8A%BC%E7%BD%AA%E7%8A%AF/"/>
<id>http://www.sxyoi.cn/2018/11/06/关押罪犯/</id>
<published>2018-11-06T15:58:00.000Z</published>
<updated>2018-11-06T16:11:09.300Z</updated>
<content type="html"><![CDATA[<p><a href="https://www.luogu.org/problemnew/show/P1525" target="_blank" rel="noopener">题目链接</a></p><p>一道不错的题</p><a id="more"></a><h2>sol</h2><h3>1.二分答案+二分图判定</h3><p>我们要让冲突事件影响力最大值最小,然后就容易想到二分答案</p><p>但是怎么判定?</p><p>其实两个监狱类似于两个集合,每个犯人类似于一个点,冲突关系类似于边</p><p>如果冲突最大值为maxx,就意味着对于权值大于maxx的边及其两端的点构成的子图构成了一个二分图</p><p>所以判定只是判定是否为二分图。。。直接染色判定就好了</p><p>复杂度大概是O((n+m) log max{c_i})的?</p><h3>2.并查集(虚点并查集或带权并查集)</h3><p>只会虚点并查集的做法。。。不过好像带权并查集的题有一部分可以用虚点并查集来做?还是说所有?并不怎么会带权并查集啊。。。</p><p>好像NOI食物链那道题也可以用虚点并查集来做?</p><p>用i+n表示与i敌对的点的集合,类似于一个补集</p><p>然后用类似kruskal最大生成树的方式,先处理掉影响力大的冲突关系,最后出现无法解决的矛盾时直接跳出,否则merge(u+n,v) , merge(u,v+n)</p><p>但是不知道为什么带上按秩合并一直MLE,不带按秩合并就A了。。。玄学吗?</p><p>说起来,代码长度和复杂度上好像都是并查集要更加优秀。。。但是思维难度上貌似是二分答案+二分图判定更加简单?我自己应该是想不出来虚点并查集这种操作。。。</p><h2>Code</h2><h3>1.</h3><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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstring></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstdio></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cmath></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstdlib></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><algorithm></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> rep(i,l,r) for(int i=l;i<=r;++i)</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> per(i,l,r) for(int i=l;i>=r;--i)</span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">int</span> <span class="title">read</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">char</span> c;</span><br><span class="line"> <span class="keyword">bool</span> t=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">int</span> a=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">while</span>((c=getchar())==<span class="string">' '</span>||c==<span class="string">'\n'</span>||c==<span class="string">'\r'</span>);</span><br><span class="line"> <span class="keyword">if</span>(c==<span class="string">'-'</span>)</span><br><span class="line"> {</span><br><span class="line"> t=<span class="number">1</span>;c=getchar();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">while</span>(c>=<span class="string">'0'</span>&&c<=<span class="string">'9'</span>)</span><br><span class="line"> {</span><br><span class="line"> a*=<span class="number">10</span>;a+=(c-<span class="string">'0'</span>);c=getchar();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> a*(t?<span class="number">-1</span>:<span class="number">1</span>);</span><br><span class="line">}</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">Edge</span>{</span></span><br><span class="line"> <span class="keyword">int</span> from,to,next,v;</span><br><span class="line">}e[<span class="number">200001</span>];</span><br><span class="line"><span class="keyword">int</span> last[<span class="number">20001</span>],col[<span class="number">20001</span>],<span class="keyword">ans_t</span>;</span><br><span class="line"><span class="keyword">int</span> vv[<span class="number">100001</span>];</span><br><span class="line"><span class="keyword">int</span> b[<span class="number">3</span>]={<span class="number">0</span>,<span class="number">2</span>,<span class="number">1</span>};</span><br><span class="line"><span class="keyword">int</span> n,m,cnt;</span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">void</span> <span class="title">add</span><span class="params">(<span class="keyword">int</span> from,<span class="keyword">int</span> to,<span class="keyword">int</span> v)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> e[++cnt].next=last[from];</span><br><span class="line"> last[from]=cnt;</span><br><span class="line"> e[cnt].to=to;</span><br><span class="line"> e[cnt].v=v;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">bool</span> <span class="title">dfs</span><span class="params">(<span class="keyword">int</span> x,<span class="keyword">int</span> <span class="keyword">col_t</span>)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">int</span> temp;</span><br><span class="line"> col[x]=<span class="keyword">col_t</span>;</span><br><span class="line"> temp=last[x];</span><br><span class="line"> <span class="keyword">while</span>(temp)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(e[temp].v<=<span class="keyword">ans_t</span>)</span><br><span class="line"> {</span><br><span class="line"> temp=e[temp].next;</span><br><span class="line"> <span class="keyword">continue</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span>(!col[e[temp].to])</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(!dfs(e[temp].to,b[<span class="keyword">col_t</span>]))</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span>(b[<span class="keyword">col_t</span>]!=col[e[temp].to])</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line"> temp=e[temp].next;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> <span class="number">1</span>;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">bool</span> <span class="title">judge</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="built_in">memset</span>(col,<span class="number">0</span>,<span class="keyword">sizeof</span> col);</span><br><span class="line"> rep(i,<span class="number">1</span>,n)</span><br><span class="line"> <span class="keyword">if</span>(!col[i])</span><br><span class="line"> <span class="keyword">if</span>(!dfs(i,<span class="number">1</span>))</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">return</span> <span class="number">1</span>;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">int</span> l,r,mid,ans;</span><br><span class="line"> <span class="keyword">int</span> tx,ty,tz;</span><br><span class="line"> n=read();m=read();</span><br><span class="line"> l=<span class="number">0</span>;r=m;</span><br><span class="line"> rep(i,<span class="number">1</span>,m)</span><br><span class="line"> {</span><br><span class="line"> tx=read();ty=read();tz=read();</span><br><span class="line"> add(tx,ty,tz);</span><br><span class="line"> add(ty,tx,tz);</span><br><span class="line"> vv[i]=tz;</span><br><span class="line"> }</span><br><span class="line"> sort(vv+<span class="number">1</span>,vv+m+<span class="number">1</span>);</span><br><span class="line"> <span class="keyword">while</span>(l<=r)</span><br><span class="line"> {</span><br><span class="line"> mid=((l+r)>><span class="number">1</span>);</span><br><span class="line"> <span class="keyword">ans_t</span>=vv[mid];</span><br><span class="line"> <span class="keyword">if</span>(judge())</span><br><span class="line"> {</span><br><span class="line"> r=mid<span class="number">-1</span>;</span><br><span class="line"> ans=vv[mid];</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> l=mid+<span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">"%d"</span>,ans);</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h3>2.</h3><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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstring></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstdio></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cmath></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><algorithm></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> rep(i,l,r) for(int i=l;i<=r;++i)</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> per(i,l,r) for(int i=l;i>=r;--i)</span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">int</span> <span class="title">read</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">char</span> c;</span><br><span class="line"> <span class="keyword">bool</span> t=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">int</span> a=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">while</span>((c=getchar())==<span class="string">' '</span>||c==<span class="string">'\n'</span>||c==<span class="string">'\r'</span>);</span><br><span class="line"> <span class="keyword">if</span>(c==<span class="string">'-'</span>)</span><br><span class="line"> {</span><br><span class="line"> t=<span class="number">1</span>;c=getchar();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">while</span>(c>=<span class="string">'0'</span>&&c<=<span class="string">'9'</span>)</span><br><span class="line"> {</span><br><span class="line"> a*=<span class="number">10</span>;a+=(c-<span class="string">'0'</span>);c=getchar();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> a*(t?<span class="number">-1</span>:<span class="number">1</span>);</span><br><span class="line">}</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">Edge</span>{</span></span><br><span class="line"> <span class="keyword">int</span> from,to,v;</span><br><span class="line">}e[<span class="number">100001</span>];</span><br><span class="line"><span class="keyword">int</span> n,m;</span><br><span class="line"><span class="keyword">int</span> fa[<span class="number">40001</span>];</span><br><span class="line"><span class="function"><span class="keyword">bool</span> <span class="title">cmp</span><span class="params">(Edge a,Edge b)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">return</span> a.v>b.v;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">find</span><span class="params">(<span class="keyword">int</span> x)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">return</span> fa[x]==x?x:fa[x]=find(fa[x]);</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">merge</span><span class="params">(<span class="keyword">int</span> x,<span class="keyword">int</span> y)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> x=find(x);y=find(y);</span><br><span class="line"> fa[x]=y;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">int</span> ans=<span class="number">0</span>;</span><br><span class="line"> n=read();m=read();</span><br><span class="line"> rep(i,<span class="number">1</span>,n+n)fa[i]=i;</span><br><span class="line"> rep(i,<span class="number">1</span>,m)</span><br><span class="line"> {</span><br><span class="line"> e[i].from=read();e[i].to=read();e[i].v=read();</span><br><span class="line"> }</span><br><span class="line"> sort(e+<span class="number">1</span>,e+m+<span class="number">1</span>,cmp);</span><br><span class="line"> rep(i,<span class="number">1</span>,m)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(find(e[i].from)==find(e[i].to))</span><br><span class="line"> {</span><br><span class="line"> ans=e[i].v;</span><br><span class="line"> <span class="keyword">break</span>;</span><br><span class="line"> }</span><br><span class="line"> merge(e[i].from+n,e[i].to);</span><br><span class="line"> merge(e[i].from,e[i].to+n);</span><br><span class="line"> }</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">"%d"</span>,ans);</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<p><a href="https://www.luogu.org/problemnew/show/P1525" target="_blank" rel="noopener">题目链接</a></p>
<p>一道不错的题</p>
</summary>
<category term="图论" scheme="http://www.sxyoi.cn/tags/%E5%9B%BE%E8%AE%BA/"/>
<category term="二分答案" scheme="http://www.sxyoi.cn/tags/%E4%BA%8C%E5%88%86%E7%AD%94%E6%A1%88/"/>
<category term="并查集" scheme="http://www.sxyoi.cn/tags/%E5%B9%B6%E6%9F%A5%E9%9B%86/"/>
<category term="二分图" scheme="http://www.sxyoi.cn/tags/%E4%BA%8C%E5%88%86%E5%9B%BE/"/>
<category term="虚点并查集" scheme="http://www.sxyoi.cn/tags/%E8%99%9A%E7%82%B9%E5%B9%B6%E6%9F%A5%E9%9B%86/"/>
<category term="带权并查集" scheme="http://www.sxyoi.cn/tags/%E5%B8%A6%E6%9D%83%E5%B9%B6%E6%9F%A5%E9%9B%86/"/>
</entry>
<entry>
<title>HAOI2006受欢迎的牛</title>
<link href="http://www.sxyoi.cn/2018/11/06/HAOI2006%E5%8F%97%E6%AC%A2%E8%BF%8E%E7%9A%84%E7%89%9B/"/>
<id>http://www.sxyoi.cn/2018/11/06/HAOI2006受欢迎的牛/</id>
<published>2018-11-06T15:47:00.000Z</published>
<updated>2018-11-06T15:56:13.796Z</updated>
<content type="html"><![CDATA[<p><a href="https://www.luogu.org/problemnew/show/P2341" target="_blank" rel="noopener">题目链接</a></p><a id="more"></a><h2>sol</h2><p>基本操作,先把强联通分量缩成点</p><p>然后我们观察一下发现,如果一个强连通分量里的牛为明星牛,那么这个强联通分量在缩点之后的图上的出度一定为0,否则这个强连通分量不是强连通分量,而是可以与指向的那个合并,因为互相喜欢</p><p>但同时,这个明星强联通分量只能有一个,否则说明强联通分量不被其他所有强联通分量喜欢,也就是ans=0</p><h2>Code</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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstring></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstdio></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cmath></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><algorithm></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><vector></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><queue></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><stack></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> rep(i,l,r) for(int i=l;i<=r;++i)</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> per(i,l,r) for(int i=l;i>=r;--i)</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> MAXN 10010</span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">int</span> <span class="title">read</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">char</span> c;</span><br><span class="line"> <span class="keyword">bool</span> t=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">int</span> a=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">while</span>((c=getchar())==<span class="string">' '</span>||c==<span class="string">'\n'</span>||c==<span class="string">'\r'</span>);</span><br><span class="line"> <span class="keyword">if</span>(c==<span class="string">'-'</span>)</span><br><span class="line"> {</span><br><span class="line"> t=<span class="number">1</span>;c=getchar();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">while</span>(c>=<span class="string">'0'</span>&&c<=<span class="string">'9'</span>)</span><br><span class="line"> {</span><br><span class="line"> a*=<span class="number">10</span>;a+=(c-<span class="string">'0'</span>);c=getchar();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> a*(t?<span class="number">-1</span>:<span class="number">1</span>);</span><br><span class="line">}</span><br><span class="line"><span class="built_in">vector</span><<span class="keyword">int</span>> G[MAXN],G2[MAXN];</span><br><span class="line"><span class="built_in">stack</span><<span class="keyword">int</span>> s;</span><br><span class="line"><span class="keyword">int</span> dfn[MAXN],low[MAXN],colcnt,col[MAXN],colnum[MAXN],ncnt,indeg[MAXN];</span><br><span class="line"><span class="keyword">bool</span> ins[MAXN],ned[MAXN];</span><br><span class="line"><span class="keyword">int</span> n,m;</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">paint</span><span class="params">(<span class="keyword">int</span> x)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> s.pop();</span><br><span class="line"> ins[x]=<span class="number">0</span>;</span><br><span class="line"> col[x]=colcnt;</span><br><span class="line"> colnum[colcnt]++;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">tarjan</span><span class="params">(<span class="keyword">int</span> x)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">int</span> temp;</span><br><span class="line"> dfn[x]=low[x]=++ncnt;</span><br><span class="line"> s.push(x);</span><br><span class="line"> ins[x]=<span class="number">1</span>;</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<G[x].size();++i)</span><br><span class="line"> {</span><br><span class="line"> temp=G[x][i];</span><br><span class="line"> <span class="keyword">if</span>(!dfn[temp])</span><br><span class="line"> {</span><br><span class="line"> tarjan(temp);</span><br><span class="line"> low[x]=min(low[x],low[temp]);</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span>(ins[temp])</span><br><span class="line"> low[x]=min(low[x],low[temp]);</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span>(low[x]==dfn[x])</span><br><span class="line"> {</span><br><span class="line"> ++colcnt;</span><br><span class="line"> <span class="keyword">while</span>((temp=s.top())!=x)</span><br><span class="line"> paint(temp);</span><br><span class="line"> paint(temp);</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">int</span> tx,ty,ans=<span class="number">0</span>;</span><br><span class="line"> n=read();m=read();</span><br><span class="line"> rep(i,<span class="number">1</span>,m)</span><br><span class="line"> {</span><br><span class="line"> tx=read();ty=read();</span><br><span class="line"> G[tx].push_back(ty);</span><br><span class="line"> }</span><br><span class="line"> rep(i,<span class="number">1</span>,n)</span><br><span class="line"> <span class="keyword">if</span>(!dfn[i])</span><br><span class="line"> tarjan(i);</span><br><span class="line"> <span class="keyword">if</span>(colcnt==<span class="number">1</span>)</span><br><span class="line"> {</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">"%d"</span>,n);</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line"> }</span><br><span class="line"> rep(i,<span class="number">1</span>,n)<span class="comment">//缩点 </span></span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> j=<span class="number">0</span>;j<G[i].size();++j)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(col[G[i][j]]!=col[i])</span><br><span class="line"> {</span><br><span class="line"> G2[col[i]].push_back(col[G[i][j]]);</span><br><span class="line"> ned[col[i]]=<span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> rep(i,<span class="number">1</span>,colcnt)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(ans&&!ned[i])</span><br><span class="line"> {</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">"0"</span>);</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span>(!ned[i])</span><br><span class="line"> ans+=colnum[i];</span><br><span class="line"> }</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">"%d"</span>,ans);</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<p><a href="https://www.luogu.org/problemnew/show/P2341" target="_blank" rel="noopener">题目链接</a></p>
</summary>
<category term="图论" scheme="http://www.sxyoi.cn/tags/%E5%9B%BE%E8%AE%BA/"/>
<category term="tarjan" scheme="http://www.sxyoi.cn/tags/tarjan/"/>
<category term="缩点" scheme="http://www.sxyoi.cn/tags/%E7%BC%A9%E7%82%B9/"/>
<category term="强连通分量" scheme="http://www.sxyoi.cn/tags/%E5%BC%BA%E8%BF%9E%E9%80%9A%E5%88%86%E9%87%8F/"/>
</entry>
<entry>
<title>序列合并</title>
<link href="http://www.sxyoi.cn/2018/11/06/%E5%BA%8F%E5%88%97%E5%90%88%E5%B9%B6/"/>
<id>http://www.sxyoi.cn/2018/11/06/序列合并/</id>
<published>2018-11-06T15:44:00.000Z</published>
<updated>2018-11-06T15:47:51.718Z</updated>
<content type="html"><![CDATA[<p><a href="https://www.luogu.org/problemnew/show/P1631" target="_blank" rel="noopener">题目链接</a></p><a id="more"></a><h2>sol</h2><p>基本相当于《最小函数值》的弱化版</p><p>先把a,b排序,然后把a[1]和b[1~n]的加到堆里</p><p>然后枚举,并且在a[i]+b[j]>=堆顶元素时切换到下一个</p><h2>Code</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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstring></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstdio></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cmath></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><queue></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><algorithm></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> rep(i,l,r) for(int i=l;i<=r;++i)</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> per(i,l,r) for(int i=l;i>=r;--i)</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> MAXN 100010</span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">int</span> <span class="title">read</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">char</span> c;</span><br><span class="line"> <span class="keyword">bool</span> t=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">int</span> a=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">while</span>((c=getchar())==<span class="string">' '</span>||c==<span class="string">'\n'</span>||c==<span class="string">'\r'</span>);</span><br><span class="line"> <span class="keyword">if</span>(c==<span class="string">'-'</span>)</span><br><span class="line"> {</span><br><span class="line"> t=<span class="number">1</span>;c=getchar();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">while</span>(c>=<span class="string">'0'</span>&&c<=<span class="string">'9'</span>)</span><br><span class="line"> {</span><br><span class="line"> a*=<span class="number">10</span>;a+=(c-<span class="string">'0'</span>);c=getchar();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> a*(t?<span class="number">-1</span>:<span class="number">1</span>);</span><br><span class="line">}</span><br><span class="line">priority_queue<<span class="keyword">int</span>> q;</span><br><span class="line"><span class="keyword">int</span> a[MAXN],b[MAXN],ans[MAXN],n,cnt;</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> n=read();</span><br><span class="line"> rep(i,<span class="number">1</span>,n)a[i]=read();</span><br><span class="line"> rep(i,<span class="number">1</span>,n)b[i]=read();</span><br><span class="line"> sort(a+<span class="number">1</span>,a+n+<span class="number">1</span>);</span><br><span class="line"> sort(b+<span class="number">1</span>,b+n+<span class="number">1</span>);</span><br><span class="line"> rep(i,<span class="number">1</span>,n)</span><br><span class="line"> q.push(a[<span class="number">1</span>]+b[i]);</span><br><span class="line"> rep(i,<span class="number">2</span>,n)</span><br><span class="line"> {</span><br><span class="line"> rep(j,<span class="number">1</span>,n)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(a[i]+b[j]<q.top())</span><br><span class="line"> {</span><br><span class="line"> q.pop();</span><br><span class="line"> q.push(a[i]+b[j]);</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> <span class="keyword">break</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">while</span>(!q.empty())</span><br><span class="line"> {</span><br><span class="line"> ans[++cnt]=q.top();</span><br><span class="line"> q.pop();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">while</span>(cnt)</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">"%d "</span>,ans[cnt--]);</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<p><a href="https://www.luogu.org/problemnew/show/P1631" target="_blank" rel="noopener">题目链接</a></p>
</summary>
<category term="贪心" scheme="http://www.sxyoi.cn/tags/%E8%B4%AA%E5%BF%83/"/>
<category term="堆" scheme="http://www.sxyoi.cn/tags/%E5%A0%86/"/>
</entry>
<entry>
<title>最小函数值</title>
<link href="http://www.sxyoi.cn/2018/11/06/%E6%9C%80%E5%B0%8F%E5%87%BD%E6%95%B0%E5%80%BC/"/>
<id>http://www.sxyoi.cn/2018/11/06/最小函数值/</id>
<published>2018-11-06T15:35:00.000Z</published>
<updated>2018-11-06T15:44:05.676Z</updated>
<content type="html"><![CDATA[<p><a href="https://www.luogu.org/problemnew/show/P2085" target="_blank" rel="noopener">题目链接</a></p><a id="more"></a><h2>sol</h2><p>维护一个大根堆,如果当前函数在x=j的值小于堆顶元素,弹掉堆顶,加入当前值</p><p>如果当前函数在x=j的值大于等于堆顶元素并且在x=j的导数值大于上一个函数在x=j的导数值,说明这个函数后面也不会比之前的函数更优,直接换到下一个函数即可</p><p>发现有了这种求前k大值得方法好像快排求前k大就比较鸡肋啊。。。?不知道是不是还有其他用途,毕竟快排是个分治算法。。。就像线性筛不能完全替代埃氏筛?</p><h2>Code</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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstring></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstdio></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cmath></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><queue></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><algorithm></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> rep(i,l,r) for(int i=l;i<=r;++i)</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> per(i,l,r) for(int i=l;i>=r;--i)</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> MAXN 10010</span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">int</span> <span class="title">read</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">char</span> c;</span><br><span class="line"> <span class="keyword">bool</span> t=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">int</span> a=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">while</span>((c=getchar())==<span class="string">' '</span>||c==<span class="string">'\n'</span>||c==<span class="string">'\r'</span>);</span><br><span class="line"> <span class="keyword">if</span>(c==<span class="string">'-'</span>)</span><br><span class="line"> {</span><br><span class="line"> t=<span class="number">1</span>;c=getchar();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">while</span>(c>=<span class="string">'0'</span>&&c<=<span class="string">'9'</span>)</span><br><span class="line"> {</span><br><span class="line"> a*=<span class="number">10</span>;a+=(c-<span class="string">'0'</span>);c=getchar();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> a*(t?<span class="number">-1</span>:<span class="number">1</span>);</span><br><span class="line">}</span><br><span class="line">priority_queue<<span class="keyword">int</span>> q;</span><br><span class="line"><span class="keyword">int</span> a[MAXN],b[MAXN],c[MAXN],n,m;</span><br><span class="line"><span class="keyword">int</span> ans[MAXN],cnt;</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">int</span> temp;</span><br><span class="line"> n=read();m=read();</span><br><span class="line"> rep(i,<span class="number">1</span>,n)</span><br><span class="line"> {</span><br><span class="line"> a[i]=read();b[i]=read();c[i]=read();</span><br><span class="line"> }</span><br><span class="line"> rep(i,<span class="number">1</span>,m)q.push(a[<span class="number">1</span>]*i*i+b[<span class="number">1</span>]*i+c[<span class="number">1</span>]);</span><br><span class="line"> rep(i,<span class="number">2</span>,n)</span><br><span class="line"> {</span><br><span class="line"> rep(j,<span class="number">1</span>,m)</span><br><span class="line"> {</span><br><span class="line"> temp=a[i]*j*j+b[i]*j+c[i];</span><br><span class="line"> <span class="keyword">if</span>(temp<q.top())</span><br><span class="line"> {</span><br><span class="line"> q.pop();</span><br><span class="line"> q.push(temp);</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span>(<span class="number">2</span>*a[i]*j+b[i]>=<span class="number">2</span>*a[i<span class="number">-1</span>]*j+b[i<span class="number">-1</span>])</span><br><span class="line"> <span class="keyword">break</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">while</span>(!q.empty())</span><br><span class="line"> {</span><br><span class="line"> ans[++cnt]=q.top();</span><br><span class="line"> q.pop();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">while</span>(cnt)</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">"%d "</span>,ans[cnt--]);</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<p><a href="https://www.luogu.org/problemnew/show/P2085" target="_blank" rel="noopener">题目链接</a></p>
</summary>
<category term="堆" scheme="http://www.sxyoi.cn/tags/%E5%A0%86/"/>
<category term="导数" scheme="http://www.sxyoi.cn/tags/%E5%AF%BC%E6%95%B0/"/>
</entry>
<entry>
<title>HAOI2009巧克力&矩形分割</title>
<link href="http://www.sxyoi.cn/2018/11/06/HAOI2009%E5%B7%A7%E5%85%8B%E5%8A%9B&%E7%9F%A9%E5%BD%A2%E5%88%86%E5%89%B2/"/>
<id>http://www.sxyoi.cn/2018/11/06/HAOI2009巧克力&矩形分割/</id>
<published>2018-11-06T15:23:00.000Z</published>
<updated>2018-11-06T15:33:44.704Z</updated>
<content type="html"><![CDATA[<p><a href="https://www.luogu.org/problemnew/show/P3173" target="_blank" rel="noopener">HAOI2009巧克力</a></p><p><a href="https://www.luogu.org/problemnew/show/P1324" target="_blank" rel="noopener">矩形分割</a></p><a id="more"></a><h2>sol</h2><p>不难想到一个O(nm)的dp(应该是正确的。。。)</p><p>但是显然复杂度过不去</p><p>然后发现贪心就可以。。。</p><p>其实x和y切割线权值跟线的位置编号是无关的。。。所以可以sort一遍</p><p>然后考虑切的策略,如果先切权值小的,那么权值大的放到后面对切割花费的贡献会更大,花费总和也就会更大,所以我们先切大的即可。。。</p><p>现在做贪心题总感觉贪心不对。。。除非是在知道这个题贪心可做的情况下才敢信心满满的去打贪心。。。以后还是先要考虑一下贪心再去考虑其他dp之类的做法。。。除非有什么不满足贪心性质的地方再去想什么dp之类的。。。</p><h2>Code</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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstring></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstdio></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cmath></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><algorithm></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> rep(i,l,r) for(int i=l;i<=r;++i)</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> per(i,l,r) for(int i=l;i>=r;--i)</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> MAXN 10010</span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">int</span> <span class="title">read</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">char</span> c;</span><br><span class="line"> <span class="keyword">bool</span> t=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">int</span> a=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">while</span>((c=getchar())==<span class="string">' '</span>||c==<span class="string">'\n'</span>||c==<span class="string">'\r'</span>);</span><br><span class="line"> <span class="keyword">if</span>(c==<span class="string">'-'</span>)</span><br><span class="line"> {</span><br><span class="line"> t=<span class="number">1</span>;c=getchar();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">while</span>(c>=<span class="string">'0'</span>&&c<=<span class="string">'9'</span>)</span><br><span class="line"> {</span><br><span class="line"> a*=<span class="number">10</span>;a+=(c-<span class="string">'0'</span>);c=getchar();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> a*(t?<span class="number">-1</span>:<span class="number">1</span>);</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">bool</span> <span class="title">cmp</span><span class="params">(<span class="keyword">const</span> <span class="keyword">int</span> &a,<span class="keyword">const</span> <span class="keyword">int</span> &b)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">return</span> a>b;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">int</span> x[MAXN],y[MAXN],n,m;</span><br><span class="line"><span class="keyword">long</span> <span class="keyword">long</span> ans;</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">int</span> l=<span class="number">1</span>,r=<span class="number">1</span>;</span><br><span class="line"> n=read();m=read();</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<n;++i)x[i]=read();</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<m;++i)y[i]=read();</span><br><span class="line"> sort(x+<span class="number">1</span>,x+n,cmp);sort(y+<span class="number">1</span>,y+m,cmp);</span><br><span class="line"> <span class="keyword">while</span>(l<n&&r<m)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(x[l]>y[r])</span><br><span class="line"> {</span><br><span class="line"> ans+=x[l]*r;</span><br><span class="line"> ++l;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> {</span><br><span class="line"> ans+=y[r]*l;</span><br><span class="line"> ++r;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">while</span>(l<n)</span><br><span class="line"> {</span><br><span class="line"> ans+=x[l]*r;++l;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">while</span>(r<m)</span><br><span class="line"> {</span><br><span class="line"> ans+=y[r]*l;++r;</span><br><span class="line"> }</span><br><span class="line"> <span class="built_in">cout</span><<ans;</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<p><a href="https://www.luogu.org/problemnew/show/P3173" target="_blank" rel="noopener">HAOI2009巧克力</a></p>
<p><a href="https://www.luogu.org/problemnew/show/P1324" target="_blank" rel="noopener">矩形分割</a></p>
</summary>
<category term="贪心" scheme="http://www.sxyoi.cn/tags/%E8%B4%AA%E5%BF%83/"/>
</entry>
<entry>
<title>相似基因</title>
<link href="http://www.sxyoi.cn/2018/11/06/%E7%9B%B8%E4%BC%BC%E5%9F%BA%E5%9B%A0/"/>
<id>http://www.sxyoi.cn/2018/11/06/相似基因/</id>
<published>2018-11-06T15:13:00.000Z</published>
<updated>2018-11-06T15:23:45.319Z</updated>
<content type="html"><![CDATA[<p><a href="https://www.luogu.org/problemnew/show/P1140" target="_blank" rel="noopener">题目链接</a></p><a id="more"></a><h2>sol</h2><p>总是想做成一维的,但是发现做不出</p><p>dp[i]/[j]表示第一串到第i位,第二串到第j位的最大相似度</p><p>然后不难发现可以从(i,j-1) / (i-1,j) / (i-1,j-1)转移过来</p><p>//但是不知道为什么从(0,0)开始 往后推不对,就是从(i,j)到(i)</p><p>↑错误的原因是没有(len1,len2)从(len1-1,len2)和(len1,len2-1)转移过来的情况,居然想了一个小时都没想出来为什么错。。。写这篇博客的时候重新写了一下三种转移恍然大悟。。。稍微改动一下就可以ac了。。。</p><p>WA的转移</p><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<l1;++i)</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> j=<span class="number">0</span>;j<l2;++j)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(!vis[i+<span class="number">1</span>][j+<span class="number">1</span>])</span><br><span class="line"> {</span><br><span class="line"> vis[i+<span class="number">1</span>][j+<span class="number">1</span>]=<span class="number">1</span>;</span><br><span class="line"> dp[i+<span class="number">1</span>][j+<span class="number">1</span>]=dp[i][j]+mapp[ja[i+<span class="number">1</span>]][jb[j+<span class="number">1</span>]];</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> dp[i+<span class="number">1</span>][j+<span class="number">1</span>]=max(dp[i+<span class="number">1</span>][j+<span class="number">1</span>],mapp[ja[i+<span class="number">1</span>]][jb[j+<span class="number">1</span>]]+dp[i][j]);</span><br><span class="line"> <span class="keyword">if</span>(!vis[i+<span class="number">1</span>][j])</span><br><span class="line"> {</span><br><span class="line"> vis[i+<span class="number">1</span>][j]=<span class="number">1</span>;</span><br><span class="line"> dp[i+<span class="number">1</span>][j]=dp[i][j]+mapp[ja[i+<span class="number">1</span>]][<span class="number">0</span>]; </span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> dp[i+<span class="number">1</span>][j]=max(dp[i+<span class="number">1</span>][j],mapp[ja[i+<span class="number">1</span>]][<span class="number">0</span>]+dp[i][j]);</span><br><span class="line"> <span class="keyword">if</span>(!vis[i][j+<span class="number">1</span>])</span><br><span class="line"> {</span><br><span class="line"> vis[i][j+<span class="number">1</span>]=<span class="number">1</span>;</span><br><span class="line"> dp[i][j+<span class="number">1</span>]=dp[i][j]+mapp[<span class="number">0</span>][jb[j+<span class="number">1</span>]];</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> dp[i][j+<span class="number">1</span>]=max(dp[i][j+<span class="number">1</span>],dp[i][j]+mapp[<span class="number">0</span>][jb[j+<span class="number">1</span>]]);</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><p>正确的转移</p><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<=l1;++i)</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> j=<span class="number">0</span>;j<=l2;++j)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(i+<span class="number">1</span><=l1&&j+<span class="number">1</span><=l2)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(!vis[i+<span class="number">1</span>][j+<span class="number">1</span>])</span><br><span class="line"> {</span><br><span class="line"> vis[i+<span class="number">1</span>][j+<span class="number">1</span>]=<span class="number">1</span>;</span><br><span class="line"> dp[i+<span class="number">1</span>][j+<span class="number">1</span>]=dp[i][j]+mapp[ja[i+<span class="number">1</span>]][jb[j+<span class="number">1</span>]];</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> dp[i+<span class="number">1</span>][j+<span class="number">1</span>]=max(dp[i+<span class="number">1</span>][j+<span class="number">1</span>],mapp[ja[i+<span class="number">1</span>]][jb[j+<span class="number">1</span>]]+dp[i][j]);</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span>(i+<span class="number">1</span><=l1)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(!vis[i+<span class="number">1</span>][j])</span><br><span class="line"> {</span><br><span class="line"> vis[i+<span class="number">1</span>][j]=<span class="number">1</span>;</span><br><span class="line"> dp[i+<span class="number">1</span>][j]=dp[i][j]+mapp[ja[i+<span class="number">1</span>]][<span class="number">4</span>]; </span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> dp[i+<span class="number">1</span>][j]=max(dp[i+<span class="number">1</span>][j],mapp[ja[i+<span class="number">1</span>]][<span class="number">4</span>]+dp[i][j]);</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span>(j+<span class="number">1</span><=l2)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(!vis[i][j+<span class="number">1</span>])</span><br><span class="line"> {</span><br><span class="line"> vis[i][j+<span class="number">1</span>]=<span class="number">1</span>;</span><br><span class="line"> dp[i][j+<span class="number">1</span>]=dp[i][j]+mapp[<span class="number">4</span>][jb[j+<span class="number">1</span>]];</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> dp[i][j+<span class="number">1</span>]=max(dp[i][j+<span class="number">1</span>],dp[i][j]+mapp[<span class="number">4</span>][jb[j+<span class="number">1</span>]]);</span><br><span class="line"> }</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><p>并不喜欢题解里的从当前的减去那种转移方式。。。感觉初始化不好想,而且在这里感觉没那么直观显然。。。</p><h2>Code</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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstring></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstdio></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cmath></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><algorithm></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> rep(i,l,r) for(int i=l;i<=r;++i)</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> per(i,l,r) for(int i=l;i>=r;--i)</span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> mapp[<span class="number">5</span>][<span class="number">5</span>]=</span><br><span class="line">{</span><br><span class="line"> {<span class="number">5</span>,<span class="number">-1</span>,<span class="number">-2</span>,<span class="number">-1</span>,<span class="number">-3</span>},</span><br><span class="line"> {<span class="number">-1</span>,<span class="number">5</span>,<span class="number">-3</span>,<span class="number">-2</span>,<span class="number">-4</span>},</span><br><span class="line"> {<span class="number">-2</span>,<span class="number">-3</span>,<span class="number">5</span>,<span class="number">-2</span>,<span class="number">-2</span>},</span><br><span class="line"> {<span class="number">-1</span>,<span class="number">-2</span>,<span class="number">-2</span>,<span class="number">5</span>,<span class="number">-1</span>},</span><br><span class="line"> {<span class="number">-3</span>,<span class="number">-4</span>,<span class="number">-2</span>,<span class="number">-1</span>,<span class="number">0</span>}</span><br><span class="line">};</span><br><span class="line"><span class="keyword">int</span> dp[<span class="number">101</span>][<span class="number">101</span>];</span><br><span class="line"><span class="keyword">int</span> l1,l2,ja[<span class="number">101</span>],jb[<span class="number">101</span>];</span><br><span class="line"><span class="keyword">bool</span> vis[<span class="number">101</span>][<span class="number">101</span>];</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">char</span> c;</span><br><span class="line"> <span class="built_in">scanf</span>(<span class="string">"%d"</span>,&l1);</span><br><span class="line"> rep(i,<span class="number">1</span>,l1)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">while</span>((c=getchar())==<span class="string">' '</span>||c==<span class="string">'\n'</span>||c==<span class="string">'\r'</span>);</span><br><span class="line"> <span class="keyword">if</span>(c==<span class="string">'A'</span>)ja[i]=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span>(c==<span class="string">'C'</span>)ja[i]=<span class="number">1</span>;</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span>(c==<span class="string">'G'</span>)ja[i]=<span class="number">2</span>;</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span>(c==<span class="string">'T'</span>)ja[i]=<span class="number">3</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="built_in">scanf</span>(<span class="string">"%d"</span>,&l2);</span><br><span class="line"> rep(i,<span class="number">1</span>,l2)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">while</span>((c=getchar())==<span class="string">' '</span>||c==<span class="string">'\n'</span>||c==<span class="string">'\r'</span>);</span><br><span class="line"> <span class="keyword">if</span>(c==<span class="string">'A'</span>)jb[i]=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span>(c==<span class="string">'C'</span>)jb[i]=<span class="number">1</span>;</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span>(c==<span class="string">'G'</span>)jb[i]=<span class="number">2</span>;</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span>(c==<span class="string">'T'</span>)jb[i]=<span class="number">3</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<=l1;++i)</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> j=<span class="number">0</span>;j<=l2;++j)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(i+<span class="number">1</span><=l1&&j+<span class="number">1</span><=l2)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(!vis[i+<span class="number">1</span>][j+<span class="number">1</span>])</span><br><span class="line"> {</span><br><span class="line"> vis[i+<span class="number">1</span>][j+<span class="number">1</span>]=<span class="number">1</span>;</span><br><span class="line"> dp[i+<span class="number">1</span>][j+<span class="number">1</span>]=dp[i][j]+mapp[ja[i+<span class="number">1</span>]][jb[j+<span class="number">1</span>]];</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> dp[i+<span class="number">1</span>][j+<span class="number">1</span>]=max(dp[i+<span class="number">1</span>][j+<span class="number">1</span>],mapp[ja[i+<span class="number">1</span>]][jb[j+<span class="number">1</span>]]+dp[i][j]);</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span>(i+<span class="number">1</span><=l1)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(!vis[i+<span class="number">1</span>][j])</span><br><span class="line"> {</span><br><span class="line"> vis[i+<span class="number">1</span>][j]=<span class="number">1</span>;</span><br><span class="line"> dp[i+<span class="number">1</span>][j]=dp[i][j]+mapp[ja[i+<span class="number">1</span>]][<span class="number">4</span>]; </span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> dp[i+<span class="number">1</span>][j]=max(dp[i+<span class="number">1</span>][j],mapp[ja[i+<span class="number">1</span>]][<span class="number">4</span>]+dp[i][j]);</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span>(j+<span class="number">1</span><=l2)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(!vis[i][j+<span class="number">1</span>])</span><br><span class="line"> {</span><br><span class="line"> vis[i][j+<span class="number">1</span>]=<span class="number">1</span>;</span><br><span class="line"> dp[i][j+<span class="number">1</span>]=dp[i][j]+mapp[<span class="number">4</span>][jb[j+<span class="number">1</span>]];</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> dp[i][j+<span class="number">1</span>]=max(dp[i][j+<span class="number">1</span>],dp[i][j]+mapp[<span class="number">4</span>][jb[j+<span class="number">1</span>]]);</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="built_in">cout</span><<dp[l1][l2];</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<p><a href="https://www.luogu.org/problemnew/show/P1140" target="_blank" rel="noopener">题目链接</a></p>
</summary>
<category term="动态规划" scheme="http://www.sxyoi.cn/tags/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92/"/>
</entry>
<entry>
<title>【USACO07JAN】区间统计Tallest Cow</title>
<link href="http://www.sxyoi.cn/2018/11/06/%5BUSACO07JAN%5D%E5%8C%BA%E9%97%B4%E7%BB%9F%E8%AE%A1Tallest%20Cow/"/>
<id>http://www.sxyoi.cn/2018/11/06/[USACO07JAN]区间统计Tallest Cow/</id>
<published>2018-11-06T15:08:00.000Z</published>
<updated>2018-11-06T15:12:31.254Z</updated>
<content type="html"><![CDATA[<p><a href="https://www.luogu.org/problemnew/show/P2879" target="_blank" rel="noopener">题目链接</a></p><a id="more"></a><h2>sol</h2><p>一开始以为是个线段树或者分块之类的数据结构,但是对于最后的输出并不是很好</p><p>然后发现可以差分</p><p>一开始所有的身高都是可能的最大身高,每当出现一对(a,b)相望时,[a+1,b-1]中的身高-1</p><p>注意到会有重复数据,所以要判重</p><p>直接用了个map做掉了。。。</p><p>不判重就只有五十分。。。以后还是要考虑一下数据的问题。。。</p><h2>Code</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><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstring></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstdio></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cmath></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><map></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><algorithm></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> rep(i,l,r) for(int i=l;i<=r;++i)</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> per(i,l,r) for(int i=l;i>=r;--i)</span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">int</span> <span class="title">read</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">char</span> c;</span><br><span class="line"> <span class="keyword">bool</span> t=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">int</span> a=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">while</span>((c=getchar())==<span class="string">' '</span>||c==<span class="string">'\n'</span>||c==<span class="string">'\r'</span>);</span><br><span class="line"> <span class="keyword">if</span>(c==<span class="string">'-'</span>)</span><br><span class="line"> {</span><br><span class="line"> t=<span class="number">1</span>;c=getchar();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">while</span>(c>=<span class="string">'0'</span>&&c<=<span class="string">'9'</span>)</span><br><span class="line"> {</span><br><span class="line"> a*=<span class="number">10</span>;a+=(c-<span class="string">'0'</span>);c=getchar();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> a*(t?<span class="number">-1</span>:<span class="number">1</span>);</span><br><span class="line">}</span><br><span class="line"><span class="keyword">int</span> cf[<span class="number">10010</span>];</span><br><span class="line"><span class="built_in">map</span><<span class="keyword">int</span>,<span class="keyword">int</span>> sb;</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">int</span> tx,ty;</span><br><span class="line"> <span class="keyword">int</span> n=read(),I=read(),Mh=read(),r=read();</span><br><span class="line"> rep(i,<span class="number">1</span>,r)</span><br><span class="line"> {</span><br><span class="line"> tx=read();ty=read();</span><br><span class="line"> <span class="keyword">if</span>(tx>ty)swap(tx,ty);</span><br><span class="line"> <span class="keyword">if</span>(ty-tx<=<span class="number">1</span>)<span class="keyword">continue</span>;</span><br><span class="line"> <span class="keyword">if</span>(sb[tx*n+ty])<span class="keyword">continue</span>;</span><br><span class="line"> sb[tx*n+ty]=<span class="number">1</span>;</span><br><span class="line"> cf[tx]-=<span class="number">1</span>;</span><br><span class="line"> cf[ty<span class="number">-1</span>]+=<span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line"> rep(i,<span class="number">1</span>,n)</span><br><span class="line"> {</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">"%d\n"</span>,Mh);</span><br><span class="line"> Mh+=cf[i];</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<p><a href="https://www.luogu.org/problemnew/show/P2879" target="_blank" rel="noopener">题目链接</a></p>
</summary>
<category term="差分" scheme="http://www.sxyoi.cn/tags/%E5%B7%AE%E5%88%86/"/>
<category term="哈希判重" scheme="http://www.sxyoi.cn/tags/%E5%93%88%E5%B8%8C%E5%88%A4%E9%87%8D/"/>
</entry>
<entry>
<title>JLOI2012树</title>
<link href="http://www.sxyoi.cn/2018/11/06/JLOI2012%E6%A0%91/"/>
<id>http://www.sxyoi.cn/2018/11/06/JLOI2012树/</id>
<published>2018-11-06T14:58:00.000Z</published>
<updated>2018-11-06T15:07:02.200Z</updated>
<content type="html"><![CDATA[<p><a href="https://www.luogu.org/problemnew/show/P3252" target="_blank" rel="noopener">题目链接</a></p><a id="more"></a><h2>sol</h2><p>一开始以为树形dp什么的。。。但是是多叉树就不会了。。。</p><p>然后想的是: dfs,每搜到一个叶子节点就开始在栈内节点上尺取(好像也叫two-pointers)?但是并不会打尺取/two-pointers</p><p>所以就每次搜到叶子做一个前缀和,然后对于每一个找</p><p>是否存在summ[j],使得summ[now]-summ[j]==S</p><p>然后注意到点权都是正整数,所以可以二分查找</p><p>但这个复杂度好像并不对,最坏应该是O( (n^2) * (log n -log 4) / 4) ,是n^2 log n级别的了,但是题目好像并没有卡</p><p>如果尺取的话复杂度的log应该就没了,也就n^2级别,只是常数比下面的搜索小一点?</p><p>其实从每个点开始dfs的最坏复杂度也就O(n^2 / 2) ,就是n^2级别的了</p><p>所以感觉这两种并不是正解?</p><p>但是并不会其他做法。。。我好菜啊。。。</p><h2>Code</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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstring></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstdio></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cmath></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><algorithm></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> rep(i,l,r) for(int i=l;i<=r;++i)</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> per(i,l,r) for(int i=l;i>=r;--i)</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> MAXN 100010</span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">int</span> <span class="title">read</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">char</span> c;</span><br><span class="line"> <span class="keyword">bool</span> t=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">int</span> a=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">while</span>((c=getchar())==<span class="string">' '</span>||c==<span class="string">'\n'</span>||c==<span class="string">'\r'</span>);</span><br><span class="line"> <span class="keyword">if</span>(c==<span class="string">'-'</span>)</span><br><span class="line"> {</span><br><span class="line"> t=<span class="number">1</span>;c=getchar();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">while</span>(c>=<span class="string">'0'</span>&&c<=<span class="string">'9'</span>)</span><br><span class="line"> {</span><br><span class="line"> a*=<span class="number">10</span>;a+=(c-<span class="string">'0'</span>);c=getchar();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> a*(t?<span class="number">-1</span>:<span class="number">1</span>);</span><br><span class="line">}</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">Edge</span>{</span></span><br><span class="line"> <span class="keyword">int</span> to,next;</span><br><span class="line">}e[MAXN];</span><br><span class="line"><span class="keyword">int</span> last[MAXN],dp[MAXN],v[MAXN];</span><br><span class="line"><span class="keyword">int</span> n,s,myStack[MAXN],tail,ans;</span><br><span class="line"><span class="keyword">int</span> summ[MAXN];</span><br><span class="line"><span class="keyword">bool</span> vis[MAXN],notRoot[MAXN];</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">dfs</span><span class="params">(<span class="keyword">int</span> x)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> myStack[++tail]=x;</span><br><span class="line"> <span class="keyword">if</span>(!last[x])</span><br><span class="line"> {</span><br><span class="line"> rep(i,<span class="number">1</span>,tail)</span><br><span class="line"> summ[i]=summ[i<span class="number">-1</span>]+v[myStack[i]];</span><br><span class="line"> rep(i,<span class="number">1</span>,tail)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(vis[myStack[i]])</span><br><span class="line"> <span class="keyword">continue</span>;</span><br><span class="line"> vis[myStack[i]]=<span class="number">1</span>;</span><br><span class="line"> <span class="keyword">if</span>((*lower_bound(summ,summ+i+<span class="number">1</span>,summ[i]-s))==summ[i]-s)</span><br><span class="line"> ++ans;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">int</span> temp=last[x];</span><br><span class="line"> <span class="keyword">while</span>(temp)</span><br><span class="line"> {</span><br><span class="line"> dfs(e[temp].to);</span><br><span class="line"> temp=e[temp].next;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> --tail;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">int</span> tx,ty;</span><br><span class="line"> n=read();s=read();</span><br><span class="line"> rep(i,<span class="number">1</span>,n)</span><br><span class="line"> {</span><br><span class="line"> v[i]=read();</span><br><span class="line"> <span class="keyword">if</span>(v[i]==s)</span><br><span class="line"> {</span><br><span class="line"> ++ans;</span><br><span class="line"> vis[i]=<span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<n;++i)</span><br><span class="line"> {</span><br><span class="line"> tx=read();ty=read();</span><br><span class="line"> e[i].next=last[tx];</span><br><span class="line"> last[tx]=i;</span><br><span class="line"> e[i].to=ty;</span><br><span class="line"> notRoot[ty]=<span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line"> rep(i,<span class="number">1</span>,n)</span><br><span class="line"> <span class="keyword">if</span>(!notRoot[i])</span><br><span class="line"> {</span><br><span class="line"> dfs(i);</span><br><span class="line"> <span class="keyword">break</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">"%d"</span>,ans);</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<p><a href="https://www.luogu.org/problemnew/show/P3252" target="_blank" rel="noopener">题目链接</a></p>
</summary>
<category term="DFS" scheme="http://www.sxyoi.cn/tags/DFS/"/>
<category term="二分查找" scheme="http://www.sxyoi.cn/tags/%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE/"/>
<category term="前缀和" scheme="http://www.sxyoi.cn/tags/%E5%89%8D%E7%BC%80%E5%92%8C/"/>
</entry>
<entry>
<title>树的重量(构造答案)</title>
<link href="http://www.sxyoi.cn/2018/11/06/%E6%A0%91%E7%9A%84%E9%87%8D%E9%87%8F(%E6%9E%84%E9%80%A0%E7%AD%94%E6%A1%88)/"/>
<id>http://www.sxyoi.cn/2018/11/06/树的重量(构造答案)/</id>
<published>2018-11-06T02:14:00.000Z</published>
<updated>2018-11-06T14:57:14.618Z</updated>
<content type="html"><![CDATA[<p><a href="https://www.luogu.org/problemnew/show/P1268" target="_blank" rel="noopener">题目链接</a></p><p>一道很不错的题</p><a id="more"></a><h2>sol</h2><p>一开始想到了最小生成树,但是后来发现k可以在图上加点,边可以重叠</p><p>然后就不会了。。。</p><p>先从小的数据开始考虑,如果有两个点,显然ans=dis[1]/[2]</p><p>在考虑3个点,有可能到3的边是从1->2上延伸出来的一条“叉边”</p><p>叉边其实是这种情况:</p><p><img src="https://cdn.luogu.org/upload/pic/42347.png" alt=""></p><p>然后1和2直接连边,枚举i=3~n找从1~i-1最小的延伸出的叉边</p><p>结合上图等价关系不难发现:叉边长度=(dis[1]/[i]+dis[j]/[i]-dis[i]/[j])/2</p><h2>Code</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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstring></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstdio></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cmath></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><algorithm></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> rep(i,l,r) for(int i=l;i<=r;++i)</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> per(i,l,r) for(int i=l;i>=r;--i)</span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">int</span> <span class="title">read</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"><span class="keyword">char</span> c;</span><br><span class="line"><span class="keyword">bool</span> t=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">int</span> a=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">while</span>((c=getchar())==<span class="string">' '</span>||c==<span class="string">'\n'</span>||c==<span class="string">'\r'</span>);</span><br><span class="line"><span class="keyword">while</span>(c>=<span class="string">'0'</span>&&c<=<span class="string">'9'</span>)</span><br><span class="line">{</span><br><span class="line">a*=<span class="number">10</span>;a+=(c-<span class="string">'0'</span>);c=getchar();</span><br><span class="line">}</span><br><span class="line"><span class="keyword">return</span> a*(t?<span class="number">-1</span>:<span class="number">1</span>);</span><br><span class="line">}</span><br><span class="line"><span class="keyword">int</span> dis[<span class="number">31</span>][<span class="number">31</span>],n;</span><br><span class="line"><span class="keyword">long</span> <span class="keyword">long</span> ans;</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"><span class="keyword">int</span> minn;</span><br><span class="line"><span class="keyword">while</span>(n=read())</span><br><span class="line">{</span><br><span class="line">rep(i,<span class="number">1</span>,n)</span><br><span class="line"> rep(j,i+<span class="number">1</span>,n)</span><br><span class="line"> dis[i][j]=read();</span><br><span class="line">ans=dis[<span class="number">1</span>][<span class="number">2</span>];</span><br><span class="line">rep(i,<span class="number">3</span>,n)</span><br><span class="line">{</span><br><span class="line">minn=<span class="number">2147483647</span>;</span><br><span class="line">rep(j,<span class="number">2</span>,i<span class="number">-1</span>)</span><br><span class="line"> minn=min(minn,(dis[<span class="number">1</span>][i]+dis[j][i]-dis[<span class="number">1</span>][j])/<span class="number">2</span>);</span><br><span class="line">ans+=minn;</span><br><span class="line"><span class="comment">//cout<<ans<<"test\n";</span></span><br><span class="line">}</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">"%lld\n"</span>,ans);</span><br><span class="line">}</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<p><a href="https://www.luogu.org/problemnew/show/P1268" target="_blank" rel="noopener">题目链接</a></p>
<p>一道很不错的题</p>
</summary>
<category term="图论" scheme="http://www.sxyoi.cn/tags/%E5%9B%BE%E8%AE%BA/"/>
<category term="构造" scheme="http://www.sxyoi.cn/tags/%E6%9E%84%E9%80%A0/"/>
</entry>
<entry>
<title>请柬/邮递员送信(反图spfa)</title>
<link href="http://www.sxyoi.cn/2018/10/28/%E8%AF%B7%E6%9F%AC%EF%BC%8C%E9%82%AE%E9%80%92%E5%91%98%E9%80%81%E4%BF%A1/"/>
<id>http://www.sxyoi.cn/2018/10/28/请柬,邮递员送信/</id>
<published>2018-10-27T16:18:00.000Z</published>
<updated>2018-10-27T16:23:24.914Z</updated>
<content type="html"><![CDATA[<p><a href="https://www.luogu.org/problemnew/show/P1342" target="_blank" rel="noopener">请柬</a></p><p><a href="https://www.luogu.org/problemnew/show/P1629" target="_blank" rel="noopener">邮递员送信</a></p><a id="more"></a><h2>sol</h2><p>这两道题好像基本上是完全一样的啊。。。不知道为什么一道黄一道蓝。。。</p><p>如果是无向图要来回时间直接*2</p><p>有向图的话,显然的做法是从每个点跑一遍spfa找到起点的最短路。。。但是显然过不了</p><p>其实上面等价于在反图上跑一遍spfa</p><p>所以我们正图跑一边spfa,反图跑一边spfa,这样正图上的是1点到其他点的最短路,反图上是其他点到1点的最短路,不得不说图论真的是神奇。。。</p><h2>Code</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><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//邮递员送信</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstring></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstdio></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cmath></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><queue></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><algorithm></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> rep(i,l,r) for(int i=l;i<=r;++i)</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> per(i,l,r) for(int i=l;i>=r;--i)</span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">int</span> <span class="title">read</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">char</span> c;</span><br><span class="line"> <span class="keyword">bool</span> t=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">int</span> a=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">while</span>((c=getchar())==<span class="string">' '</span>||c==<span class="string">'\n'</span>||c==<span class="string">'\r'</span>);</span><br><span class="line"> <span class="keyword">if</span>(c==<span class="string">'-'</span>)</span><br><span class="line"> {</span><br><span class="line"> t=<span class="number">1</span>;c=getchar();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">while</span>(c>=<span class="string">'0'</span>&&c<=<span class="string">'9'</span>)</span><br><span class="line"> {</span><br><span class="line"> a*=<span class="number">10</span>;a+=(c-<span class="string">'0'</span>);c=getchar();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> a*(t?<span class="number">-1</span>:<span class="number">1</span>);</span><br><span class="line">}</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">Edge</span>{</span></span><br><span class="line"> <span class="keyword">int</span> to,next,v;</span><br><span class="line">}e[<span class="number">100010</span>],ve[<span class="number">100010</span>];</span><br><span class="line"><span class="keyword">int</span> n,m;</span><br><span class="line"><span class="keyword">int</span> last[<span class="number">1001</span>],vlast[<span class="number">1001</span>],cnt,vcnt;</span><br><span class="line"><span class="keyword">long</span> <span class="keyword">long</span> dis[<span class="number">1001</span>],vdis[<span class="number">1001</span>];</span><br><span class="line"><span class="keyword">bool</span> vis[<span class="number">1001</span>];</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">add</span><span class="params">(<span class="keyword">const</span> <span class="keyword">int</span> &from,<span class="keyword">const</span> <span class="keyword">int</span> &to,<span class="keyword">const</span> <span class="keyword">int</span> &v)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> e[++cnt].next=last[from];</span><br><span class="line"> last[from]=cnt;</span><br><span class="line"> e[cnt].to=to;</span><br><span class="line"> e[cnt].v=v;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">vadd</span><span class="params">(<span class="keyword">const</span> <span class="keyword">int</span> &from,<span class="keyword">const</span> <span class="keyword">int</span> &to,<span class="keyword">const</span> <span class="keyword">int</span> &v)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> ve[++vcnt].next=vlast[from];</span><br><span class="line"> vlast[from]=vcnt;</span><br><span class="line"> ve[vcnt].to=to;</span><br><span class="line"> ve[vcnt].v=v;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">spfa</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="built_in">memset</span>(vis,<span class="number">0</span>,<span class="keyword">sizeof</span> vis);</span><br><span class="line"> <span class="keyword">int</span> temp;</span><br><span class="line"> rep(i,<span class="number">2</span>,n)</span><br><span class="line"> dis[i]=<span class="number">-1</span>;</span><br><span class="line"> dis[<span class="number">1</span>]=<span class="number">0</span>;</span><br><span class="line"> <span class="built_in">queue</span><<span class="keyword">int</span>> q;</span><br><span class="line"> q.push(<span class="number">1</span>);</span><br><span class="line"> vis[<span class="number">1</span>]=<span class="number">1</span>;</span><br><span class="line"> <span class="keyword">while</span>(!q.empty())</span><br><span class="line"> {</span><br><span class="line"> temp=last[q.front()];</span><br><span class="line"> <span class="keyword">while</span>(temp)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(dis[e[temp].to]<<span class="number">0</span>||dis[e[temp].to]>dis[q.front()]+e[temp].v)</span><br><span class="line"> {</span><br><span class="line"> dis[e[temp].to]=dis[q.front()]+e[temp].v;</span><br><span class="line"> <span class="keyword">if</span>(!vis[e[temp].to])</span><br><span class="line"> {</span><br><span class="line"> vis[e[temp].to]=<span class="number">1</span>;</span><br><span class="line"> q.push(e[temp].to);</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> temp=e[temp].next;</span><br><span class="line"> }</span><br><span class="line"> vis[q.front()]=<span class="number">0</span>;</span><br><span class="line"> q.pop();</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">vspfa</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="built_in">memset</span>(vis,<span class="number">0</span>,<span class="keyword">sizeof</span> vis);</span><br><span class="line"> <span class="keyword">int</span> temp;</span><br><span class="line"> rep(i,<span class="number">2</span>,n)</span><br><span class="line"> vdis[i]=<span class="number">-1</span>;</span><br><span class="line"> vdis[<span class="number">1</span>]=<span class="number">0</span>;</span><br><span class="line"> <span class="built_in">queue</span><<span class="keyword">int</span>> q;</span><br><span class="line"> q.push(<span class="number">1</span>);</span><br><span class="line"> vis[<span class="number">1</span>]=<span class="number">1</span>;</span><br><span class="line"> <span class="keyword">while</span>(!q.empty())</span><br><span class="line"> {</span><br><span class="line"> temp=vlast[q.front()];</span><br><span class="line"> <span class="keyword">while</span>(temp)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(vdis[ve[temp].to]<<span class="number">0</span>||vdis[ve[temp].to]>vdis[q.front()]+ve[temp].v)</span><br><span class="line"> {</span><br><span class="line"> vdis[ve[temp].to]=vdis[q.front()]+ve[temp].v;</span><br><span class="line"> <span class="keyword">if</span>(!vis[ve[temp].to])</span><br><span class="line"> {</span><br><span class="line"> vis[ve[temp].to]=<span class="number">1</span>;</span><br><span class="line"> q.push(ve[temp].to);</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> temp=ve[temp].next;</span><br><span class="line"> }</span><br><span class="line"> vis[q.front()]=<span class="number">0</span>;</span><br><span class="line"> q.pop();</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> </span><br><span class="line"> <span class="keyword">long</span> <span class="keyword">long</span> ans=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">int</span> tx,ty,tz;</span><br><span class="line"> n=read();m=read();</span><br><span class="line"> rep(i,<span class="number">1</span>,m)</span><br><span class="line"> {</span><br><span class="line"> tx=read();ty=read();tz=read();</span><br><span class="line"> add(tx,ty,tz);</span><br><span class="line"> vadd(ty,tx,tz);</span><br><span class="line"> }</span><br><span class="line"> spfa();</span><br><span class="line"> vspfa();</span><br><span class="line"> rep(i,<span class="number">2</span>,n)</span><br><span class="line"> {</span><br><span class="line"> ans+=(dis[i]+vdis[i]);</span><br><span class="line"> }</span><br><span class="line"> <span class="built_in">cout</span><<ans;</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br><span class="line"><span class="comment">//请柬</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstring></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstdio></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cmath></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><algorithm></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><queue></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> rep(i,l,r) for(int i=l;i<=r;++i)</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> per(i,l,r) for(int i=l;i>=r;--i)</span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">int</span> <span class="title">read</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">char</span> c;</span><br><span class="line"> <span class="keyword">bool</span> t=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">int</span> a=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">while</span>((c=getchar())==<span class="string">' '</span>||c==<span class="string">'\n'</span>||c==<span class="string">'\r'</span>);</span><br><span class="line"> <span class="keyword">if</span>(c==<span class="string">'-'</span>)</span><br><span class="line"> {</span><br><span class="line"> t=<span class="number">1</span>;c=getchar();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">while</span>(c>=<span class="string">'0'</span>&&c<=<span class="string">'9'</span>)</span><br><span class="line"> {</span><br><span class="line"> a*=<span class="number">10</span>;a+=(c-<span class="string">'0'</span>);c=getchar();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> a*(t?<span class="number">-1</span>:<span class="number">1</span>);</span><br><span class="line">}</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">Edge</span>{</span></span><br><span class="line"> <span class="keyword">int</span> to,next,v;</span><br><span class="line">}e[<span class="number">1000010</span>],ve[<span class="number">1000010</span>];</span><br><span class="line"><span class="keyword">int</span> n,m;</span><br><span class="line"><span class="keyword">int</span> vlast[<span class="number">1000001</span>],last[<span class="number">1000001</span>],cnt;</span><br><span class="line"><span class="keyword">long</span> <span class="keyword">long</span> dis[<span class="number">1000001</span>],ans;</span><br><span class="line"><span class="keyword">bool</span> inq[<span class="number">1000001</span>];</span><br><span class="line"><span class="built_in">queue</span><<span class="keyword">int</span>> q;</span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">void</span> <span class="title">add</span><span class="params">(<span class="keyword">const</span> <span class="keyword">int</span> &from,<span class="keyword">const</span> <span class="keyword">int</span> &to,<span class="keyword">const</span> <span class="keyword">int</span> &v)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> e[++cnt].next=last[from];</span><br><span class="line"> last[from]=cnt;</span><br><span class="line"> e[cnt].to=to;</span><br><span class="line"> e[cnt].v=v;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">void</span> <span class="title">vadd</span><span class="params">(<span class="keyword">const</span> <span class="keyword">int</span> &from,<span class="keyword">const</span> <span class="keyword">int</span> &to,<span class="keyword">const</span> <span class="keyword">int</span> &v)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> ve[cnt].next=vlast[from];</span><br><span class="line"> vlast[from]=cnt;</span><br><span class="line"> ve[cnt].to=to;</span><br><span class="line"> ve[cnt].v=v;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">spfa1</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">int</span> temp;</span><br><span class="line"> rep(i,<span class="number">2</span>,n)</span><br><span class="line"> dis[i]=<span class="number">2147483647</span>;</span><br><span class="line"> dis[<span class="number">1</span>]=<span class="number">0</span>;</span><br><span class="line"> inq[<span class="number">1</span>]=<span class="number">1</span>;</span><br><span class="line"> q.push(<span class="number">1</span>);</span><br><span class="line"> <span class="keyword">while</span>(!q.empty())</span><br><span class="line"> {</span><br><span class="line"> temp=last[q.front()];</span><br><span class="line"> <span class="keyword">while</span>(temp)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(dis[e[temp].to]>dis[q.front()]+e[temp].v)</span><br><span class="line"> {</span><br><span class="line"> dis[e[temp].to]=dis[q.front()]+e[temp].v;</span><br><span class="line"> <span class="keyword">if</span>(!inq[e[temp].to])</span><br><span class="line"> {</span><br><span class="line"> q.push(e[temp].to);</span><br><span class="line"> inq[e[temp].to]=<span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> temp=e[temp].next;</span><br><span class="line"> }</span><br><span class="line"> inq[q.front()]=<span class="number">0</span>;</span><br><span class="line"> q.pop();</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">spfa2</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">int</span> temp;</span><br><span class="line"> rep(i,<span class="number">2</span>,n)</span><br><span class="line"> dis[i]=<span class="number">2147483647</span>;</span><br><span class="line"> dis[<span class="number">1</span>]=<span class="number">0</span>;</span><br><span class="line"> inq[<span class="number">1</span>]=<span class="number">1</span>;</span><br><span class="line"> q.push(<span class="number">1</span>);</span><br><span class="line"> <span class="keyword">while</span>(!q.empty())</span><br><span class="line"> {</span><br><span class="line"> temp=vlast[q.front()];</span><br><span class="line"> <span class="keyword">while</span>(temp)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(dis[ve[temp].to]>dis[q.front()]+ve[temp].v)</span><br><span class="line"> {</span><br><span class="line"> dis[ve[temp].to]=dis[q.front()]+ve[temp].v;</span><br><span class="line"> <span class="keyword">if</span>(!inq[ve[temp].to])</span><br><span class="line"> {</span><br><span class="line"> q.push(ve[temp].to);</span><br><span class="line"> inq[ve[temp].to]=<span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> temp=ve[temp].next;</span><br><span class="line"> }</span><br><span class="line"> inq[q.front()]=<span class="number">0</span>;</span><br><span class="line"> q.pop();</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">int</span> tx,ty,tz;</span><br><span class="line"> n=read();m=read();</span><br><span class="line"> rep(i,<span class="number">1</span>,m)</span><br><span class="line"> {</span><br><span class="line"> tx=read();ty=read();tz=read();</span><br><span class="line"> add(tx,ty,tz);</span><br><span class="line"> vadd(ty,tx,tz);</span><br><span class="line"> }</span><br><span class="line"> spfa1();</span><br><span class="line"> rep(i,<span class="number">1</span>,n)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(dis[i]!=<span class="number">2147483647</span>)</span><br><span class="line"> ans+=dis[i];</span><br><span class="line"> }</span><br><span class="line"> spfa2();</span><br><span class="line"> rep(i,<span class="number">1</span>,n)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(dis[i]!=<span class="number">2147483647</span>)</span><br><span class="line"> ans+=dis[i];</span><br><span class="line"> }</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">"%lld"</span>,ans);</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h2>总结</h2>]]></content>
<summary type="html">
<p><a href="https://www.luogu.org/problemnew/show/P1342" target="_blank" rel="noopener">请柬</a></p>
<p><a href="https://www.luogu.org/problemnew/show/P1629" target="_blank" rel="noopener">邮递员送信</a></p>
</summary>
<category term="图论" scheme="http://www.sxyoi.cn/tags/%E5%9B%BE%E8%AE%BA/"/>
<category term="最短路" scheme="http://www.sxyoi.cn/tags/%E6%9C%80%E7%9F%AD%E8%B7%AF/"/>
</entry>
<entry>
<title>跑路</title>
<link href="http://www.sxyoi.cn/2018/10/28/%E8%B7%91%E8%B7%AF/"/>
<id>http://www.sxyoi.cn/2018/10/28/跑路/</id>
<published>2018-10-27T16:09:00.000Z</published>
<updated>2018-10-27T16:16:38.657Z</updated>
<content type="html"><![CDATA[<p><a href="https://www.luogu.org/problemnew/show/P1613" target="_blank" rel="noopener">题目链接</a></p><a id="more"></a><h2>sol</h2><p>这道题是最短路径和倍增思想的结合题。</p><p>观察到每条边长度均为1km,也就是2^0</p><p>再观察跑路器,每秒钟可以跑2^k千米</p><p>所以用倍增,如果u,v之间存在一条路径长度为2^k千米,那么可以转化为它们之间存在一条消耗时间为1的边</p><p>如果u,v之间存在一个点w, u,w之间存在一条路径长度为2^k,w,v之间存在一条路径长度为2^k,那么u,v之间存在一条长度为2^{k+1}的路径,当然也是消耗时间为1</p><p>按这个方法跑一边floyd来建图,然后再跑一遍Floyd找最短路径即可</p><h2>Code</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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstring></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cstdio></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cmath></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><algorithm></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> rep(i,l,r) for(int i=l;i<=r;++i)</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> per(i,l,r) for(int i=l;i>=r;--i)</span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">int</span> <span class="title">read</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">char</span> c;</span><br><span class="line"> <span class="keyword">bool</span> t=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">int</span> a=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">while</span>((c=getchar())==<span class="string">' '</span>||c==<span class="string">'\n'</span>||c==<span class="string">'\r'</span>);</span><br><span class="line"> <span class="keyword">if</span>(c==<span class="string">'-'</span>)</span><br><span class="line"> {</span><br><span class="line"> t=<span class="number">1</span>;c=getchar();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">while</span>(c>=<span class="string">'0'</span>&&c<=<span class="string">'9'</span>)</span><br><span class="line"> {</span><br><span class="line"> a*=<span class="number">10</span>;a+=(c-<span class="string">'0'</span>);c=getchar();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> a*(t?<span class="number">-1</span>:<span class="number">1</span>);</span><br><span class="line">}</span><br><span class="line"><span class="keyword">bool</span> dp[<span class="number">70</span>][<span class="number">51</span>][<span class="number">51</span>];</span><br><span class="line"><span class="keyword">int</span> n,m,dis[<span class="number">51</span>][<span class="number">51</span>];</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">int</span> tx,ty;</span><br><span class="line"> <span class="built_in">memset</span>(dis,<span class="number">0x3f3f3f3f</span>,<span class="keyword">sizeof</span> dis);</span><br><span class="line"> n=read();m=read();</span><br><span class="line"> rep(i,<span class="number">1</span>,m)</span><br><span class="line"> {</span><br><span class="line"> tx=read();ty=read();</span><br><span class="line"> dp[<span class="number">0</span>][tx][ty]=<span class="number">1</span>;</span><br><span class="line"> dis[tx][ty]=<span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line"> rep(w,<span class="number">1</span>,<span class="number">64</span>)</span><br><span class="line"> rep(k,<span class="number">1</span>,n)</span><br><span class="line"> rep(i,<span class="number">1</span>,n)</span><br><span class="line"> rep(j,<span class="number">1</span>,n)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(!dp[w][i][j])</span><br><span class="line"> dp[w][i][j]=(dp[w<span class="number">-1</span>][i][k]&dp[w<span class="number">-1</span>][k][j]);</span><br><span class="line"> <span class="keyword">if</span>(dp[w][i][j])</span><br><span class="line"> dis[i][j]=<span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line"> rep(k,<span class="number">1</span>,n)</span><br><span class="line"> rep(i,<span class="number">1</span>,n)</span><br><span class="line"> rep(j,<span class="number">1</span>,n)</span><br><span class="line"> dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);</span><br><span class="line"> <span class="built_in">cout</span><<dis[<span class="number">1</span>][n];</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h2>总结</h2><p>神奇的操作。。。</p>]]></content>
<summary type="html">
<p><a href="https://www.luogu.org/problemnew/show/P1613" target="_blank" rel="noopener">题目链接</a></p>
</summary>
<category term="最短路" scheme="http://www.sxyoi.cn/tags/%E6%9C%80%E7%9F%AD%E8%B7%AF/"/>
<category term="Floyd" scheme="http://www.sxyoi.cn/tags/Floyd/"/>
<category term="倍增" scheme="http://www.sxyoi.cn/tags/%E5%80%8D%E5%A2%9E/"/>
</entry>
</feed>