-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsearch.xml
752 lines (505 loc) · 214 KB
/
search.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
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title><![CDATA[餐巾计划问题(最小费用最大流)]]></title>
<url>/luogu/p1251/</url>
<content type="html"><![CDATA[<p> 一道最小费用最大流的模板题,对于最小费用最大流,比较简单的做法是不断地在残量网络上跑SPFA,每次找到从源点到汇点花费最小的路径,并且跑完这条路径上的流量,直到从源点无法到达汇点为止。</p>
<a id="more"></a>
<p> 这道题的建图比较有意思。我们设第i天需要nd[i]块餐巾,购买一块餐巾的费用是newp,慢洗需要sloc天,花费是slop;快洗需要fstc天,花费是fstp。首先将n天拆点,设xi为第i天开始时拥有的餐巾数量,yi为第i天结束后用过的餐巾数量。则我们从源点向每个xi连一条费用为0,流量为nd[i]的边来限制,同时从每个yi都向汇点连一条流量为nd[i],费用为0的边进行限制。</p>
<p> 接下来对于每条规则进行限制:</p>
<ol>
<li>来源为新购买的餐巾:从源点向每个yi连一条流量为无穷,花费为newp的边;</li>
<li>用过的餐巾送到慢洗部:从xi向y(i+sloc)连一条流量为无穷,花费为slop的边;</li>
<li>用过的餐巾送到快洗部:从xi向y(i+fstc)连一条流量为无穷,花费为fstp的边;</li>
<li>用过的餐巾留到下一天再处理:从xi向x(i+1)连一条流量为无穷,花费为0的边。</li>
</ol>
<p> 这样建图之后,能够保证最大流为<script type="math/tex">\sum nd[i]</script>,最小花费即为最大流的最小费用。</p>
<blockquote>
<p><em>对于反边,要注意流量为0,花费为相反数。</em></p>
</blockquote>
<h3 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div><div class="line">49</div><div class="line">50</div><div class="line">51</div><div class="line">52</div><div class="line">53</div><div class="line">54</div><div class="line">55</div><div class="line">56</div><div class="line">57</div><div class="line">58</div><div class="line">59</div><div class="line">60</div><div class="line">61</div><div class="line">62</div><div class="line">63</div><div class="line">64</div><div class="line">65</div><div class="line">66</div><div class="line">67</div><div class="line">68</div><div class="line">69</div><div class="line">70</div><div class="line">71</div><div class="line">72</div><div class="line">73</div><div class="line">74</div><div class="line">75</div><div class="line">76</div><div class="line">77</div><div class="line">78</div><div class="line">79</div><div class="line">80</div><div class="line">81</div><div class="line">82</div><div class="line">83</div><div class="line">84</div><div class="line">85</div><div class="line">86</div><div class="line">87</div><div class="line">88</div><div class="line">89</div><div class="line">90</div><div class="line">91</div><div class="line">92</div><div class="line">93</div><div class="line">94</div><div class="line">95</div><div class="line">96</div><div class="line">97</div><div class="line">98</div><div class="line">99</div><div class="line">100</div><div class="line">101</div><div class="line">102</div><div class="line">103</div><div class="line">104</div><div class="line">105</div><div class="line">106</div></pre></td><td class="code"><pre><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><iostream></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstdio></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstring></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><queue></span></span></div><div class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</div><div class="line"><span class="keyword">long</span> <span class="keyword">long</span> had[<span class="number">500005</span>],nxt[<span class="number">400009</span>],point[<span class="number">400009</span>],val[<span class="number">4000009</span>];</div><div class="line"><span class="keyword">long</span> <span class="keyword">long</span> dis[<span class="number">500005</span>];</div><div class="line"><span class="keyword">long</span> <span class="keyword">long</span> flow[<span class="number">4000009</span>];</div><div class="line"><span class="keyword">long</span> <span class="keyword">long</span> tot=<span class="number">1</span>;</div><div 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">long</span> <span class="keyword">long</span> x,<span class="keyword">long</span> <span class="keyword">long</span> y,<span class="keyword">long</span> <span class="keyword">long</span> v,<span class="keyword">long</span> <span class="keyword">long</span> f)</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> tot++;</div><div class="line"> nxt[tot]=had[x];</div><div class="line"> point[tot]=y;</div><div class="line"> had[x]=tot;</div><div class="line"> val[tot]=v;</div><div class="line"> flow[tot]=f;</div><div class="line"> tot++;</div><div class="line"> nxt[tot]=had[y];</div><div class="line"> point[tot]=x;</div><div class="line"> had[y]=tot;</div><div class="line"> val[tot]=-v;</div><div class="line"> flow[tot]=<span class="number">0</span>;</div><div class="line">}</div><div class="line"><span class="keyword">long</span> <span class="keyword">long</span> s,T;</div><div class="line"><span class="keyword">bool</span> vis[<span class="number">500005</span>];</div><div class="line"><span class="keyword">long</span> <span class="keyword">long</span> up[<span class="number">500005</span>];</div><div class="line"><span class="keyword">long</span> <span class="keyword">long</span> fw[<span class="number">500005</span>];</div><div class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">bool</span> <span class="title">spfa</span><span class="params">()</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="built_in">queue</span><<span class="keyword">long</span> <span class="keyword">long</span>> q;</div><div class="line"> <span class="built_in">memset</span>(dis,<span class="number">0x3f</span>,<span class="keyword">sizeof</span>(dis));</div><div class="line"> <span class="keyword">long</span> <span class="keyword">long</span> big=dis[<span class="number">0</span>];</div><div class="line"> dis[s]=<span class="number">0</span>;</div><div class="line"> q.push(s);</div><div class="line"> <span class="built_in">memset</span>(up,<span class="number">0</span>,<span class="keyword">sizeof</span>(up));</div><div class="line"> <span class="keyword">while</span>(!q.empty())</div><div class="line"> {</div><div class="line"> <span class="keyword">long</span> <span class="keyword">long</span> t=q.front();</div><div class="line"> q.pop();</div><div class="line"> vis[t]=<span class="number">0</span>;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">long</span> <span class="keyword">long</span> i=had[t];i;i=nxt[i])</div><div class="line"> {</div><div class="line"> <span class="keyword">long</span> <span class="keyword">long</span> to=point[i];</div><div class="line"> <span class="keyword">if</span>(flow[i]==<span class="number">0</span>)<span class="keyword">continue</span>;</div><div class="line"> <span class="keyword">if</span>(dis[to]>dis[t]+val[i])</div><div class="line"> {</div><div class="line"> dis[to]=dis[t]+val[i];</div><div class="line"> up[to]=t;</div><div class="line"> fw[to]=i;</div><div class="line"> <span class="keyword">if</span>(vis[to]==<span class="number">0</span>)</div><div class="line"> {</div><div class="line"> vis[to]=<span class="number">1</span>;</div><div class="line"> q.push(to);</div><div class="line"> }</div><div class="line"> }</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="keyword">if</span>(dis[T]==big)<span class="keyword">return</span> <span class="number">0</span>;</div><div class="line"> <span class="keyword">return</span> <span class="number">1</span>;</div><div class="line">}</div><div class="line"><span class="function"><span class="keyword">long</span> <span class="keyword">long</span> <span class="title">fl</span><span class="params">()</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="keyword">long</span> <span class="keyword">long</span> cost=<span class="number">0</span>;</div><div class="line"> <span class="keyword">while</span>(spfa())</div><div class="line"> {</div><div class="line"> <span class="keyword">long</span> <span class="keyword">long</span> mf=<span class="number">1e9</span>;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">long</span> <span class="keyword">long</span> i=T;i!=s;i=up[i])</div><div class="line"> mf=min(mf,flow[fw[i]]);</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">long</span> <span class="keyword">long</span> i=T;i!=s;i=up[i])</div><div class="line"> {</div><div class="line"> flow[fw[i]]-=mf;</div><div class="line"> flow[fw[i]^<span class="number">1</span>]+=mf;</div><div class="line"> }</div><div class="line"> cost+=dis[T]*mf;</div><div class="line"> }</div><div class="line"> <span class="keyword">return</span> cost;</div><div class="line">}</div><div class="line"><span class="keyword">long</span> <span class="keyword">long</span> n;</div><div class="line"><span class="keyword">long</span> <span class="keyword">long</span> nd[<span class="number">20004</span>];</div><div class="line"><span class="keyword">long</span> <span class="keyword">long</span> newp,fstp,slop;</div><div class="line"><span class="keyword">long</span> <span class="keyword">long</span> fstc,sloc;</div><div class="line"><span class="keyword">long</span> <span class="keyword">long</span> big=<span class="number">1e9</span>;</div><div class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="built_in">scanf</span>(<span class="string">"%lld"</span>,&n);</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">long</span> <span class="keyword">long</span> i=<span class="number">1</span>;i<=n;i++)</div><div class="line"> <span class="built_in">scanf</span>(<span class="string">"%d"</span>,&nd[i]);</div><div class="line"> <span class="built_in">scanf</span>(<span class="string">"%lld%lld%lld%lld%lld"</span>,&newp,&fstc,&fstp,&sloc,&slop);</div><div class="line"> s=<span class="number">0</span>;</div><div class="line"> T=<span class="number">2</span>*n+<span class="number">10</span>;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">long</span> <span class="keyword">long</span> i=<span class="number">1</span>;i<=n;i++)</div><div class="line"> {</div><div class="line"> add(s,i,<span class="number">0</span>,nd[i]);</div><div class="line"> add(i+n,T,<span class="number">0</span>,nd[i]);</div><div class="line"> add(s,i+n,newp,big);</div><div class="line"> <span class="keyword">if</span>(i+sloc<=n)</div><div class="line"> add(i,(i+sloc)+n,slop,big);</div><div class="line"> <span class="keyword">if</span>(i+fstc<=n)</div><div class="line"> add(i,(i+fstc)+n,fstp,big);</div><div class="line"> <span class="keyword">if</span>(i+<span class="number">1</span><=n)</div><div class="line"> add(i,i+<span class="number">1</span>,<span class="number">0</span>,big);</div><div class="line"> }</div><div class="line"> <span class="built_in">printf</span>(<span class="string">"%lld"</span>,fl());</div><div class="line"> <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line">}</div></pre></td></tr></table></figure>
]]></content>
<categories>
<category> luogu </category>
</categories>
<tags>
<tag> 费用流 </tag>
<tag> 模板 </tag>
</tags>
</entry>
<entry>
<title><![CDATA[noip前注意事项总结]]></title>
<url>/oi-nweb/alet/</url>
<content type="html"><![CDATA[<p>10.30,距NOIP还有11天。简单总结一下机房诸位dalao已经发现的鬼bug和一些注意事项。</p>
<a id="more"></a>
<h3 id="考试事项"><a href="#考试事项" class="headerlink" title="考试事项"></a>考试事项</h3><ol>
<li>在上机但还未发题的这段时间里可以调一调Dev,随便写个程序看看基本功能有没有出锅,然后把头文件和freopen打上,检查一下确保没有打错,这样再发下题之后就可以直接用了。</li>
<li>发下题之后一定要好好读题!一定要好好读题!一定要好好读题!注意看一下<strong>时间和空间限制</strong>,看一下<strong>数据范围</strong>,看一下<strong>当无解时是输出</strong>-1,“no”大不大写或是<del>N0之类</del>,当然题意更不能理解错,尽可能地<strong>对着样例手推一遍</strong>,确保理解无误。还有很重要一点就是<strong>变量的输入顺序</strong>以及是否为<strong>多组数据</strong></li>
<li>时间充足的话就先不要急着打键盘,先在纸上列一列,自己手出几组数据推一下,当然如果时间不太够或是程序很短的话可以先打上再调</li>
<li>学会放弃,有的时候重构一遍真的比瞎打补丁或是盲目调试要快得多,也靠谱得多,当然最重要的还是想好了再写。</li>
<li>先把三道题都过一遍,先写先确定的或是最有把握的。具体顺序大概: 要思路但是好实现的(当然要先保证自己思路是对的)、简单但是细节较多的、确定算法但是实现可能会很麻烦的、各种暴力和骗分</li>
<li>当写着别的题时如果想到了可能会卡掉已写完的题的数据的话,如果现在在写的题快写完了或是特别有把握,就先记下数据去完成当前题,再用数据去调上一道;如果现在在写的题只是一个分值不高的暴力之类的,就先去调之前的题。</li>
<li>写对拍</li>
<li>提交之前一定要全检查一遍:文件输入输出,调试信息是否全部删除;最好用样例数据重新编译并执行一遍</li>
<li>在一些时间点备份,以防止删掉了某些自己都没有注意到的东西。</li>
<li>要在linux下试一遍,防止某些不兼容</li>
</ol>
<h3 id="一些需要注意的锅"><a href="#一些需要注意的锅" class="headerlink" title="一些需要注意的锅"></a>一些需要注意的锅</h3><ol>
<li>变量名不要起得太正经(防止与linux保留字冲突)</li>
<li>double数组不要用memset</li>
<li>linux与windows的换行符不同,一些情况需要注意</li>
<li><code>char c[19][10000]</code> 是开了10000个长度为19的字符串,而不是相反</li>
<li>位运算优先级</li>
<li>==与=</li>
<li>极大值0x7FFFFFFF 极小值0x8000001 这两个值十分极端,在int下加一\减一就会爆</li>
<li>考试不要瞎用读优</li>
<li>数组开太小</li>
<li>相似变量名打错</li>
<li>没有初始化 </li>
<li>括号是否套错</li>
<li>爆int</li>
<li>爆精度</li>
<li>自环、重边、有向无环</li>
<li>有些题目的收尾操作</li>
</ol>
<p>大概就这么多?</p>
<p>NOIP RP++!</p>
]]></content>
<categories>
<category> 线下OI </category>
</categories>
<tags>
<tag> 总结 </tag>
</tags>
</entry>
<entry>
<title><![CDATA[换主题啦]]></title>
<url>/new-world/lmaterial/</url>
<content type="html"><![CDATA[<p>纠结了半天,终于今天下午决定放弃hexo的material主题,改用next.</p>
<a id="more"></a>
<p>倒不是说material不好,只是不合适而已。适合material是多图流,最好是每篇文章都能找到合适的图的网站,而这个博客我本来打算是以算法和水题历程为主来着,一般不会去找配图,更别说合适的了。。。。这种情况下,只有使用随机缩略图,于是我收集了两百多张bing美图,在里头挑了一张星云的做背景,但事实证明风格迥异的缩略图和背景放在一起简!直!是!灾!难!本来还觉得能看,后来越看越忍不了,终于决定换个主题。</p>
<p>至于为什么选用next嘛。。。在一开始建博客的时候,yzyun大佬就给我安利的这个主题,当时没怎么看,后来发现找资料的时候,许多大牛使用的都是这个主题,简洁,动画细腻,从骨子里透露出一种技术的气息,还自带动画背景效果,除了没有很多地方放图以外几乎没有缺点,而且我也没有那么多图?于是乎种种原因使然,我决定再次换个主题。所幸next的中文说明很全,加上本身已经有了经验,这次主题的更换并没有什么大锅,很顺利地完成了。接下来可能自己会再搞一搞,但应该不会换主题了吧。。。。</p>
]]></content>
<categories>
<category> 新世界 </category>
</categories>
<tags>
<tag> 新世界 </tag>
</tags>
</entry>
<entry>
<title><![CDATA[2-sat总结]]></title>
<url>/algorithm/2-sat/</url>
<content type="html"><![CDATA[<p>到今天总算是刷完了poj的6道2-sat,在这里做个纪念。</p>
<a id="more"></a>
<p>2-sat的本质就是给你n个布尔变量和m个限制,限制一共有四种格式:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">若A为真,则B必为真</div><div class="line">若A为真,则B必不为真</div><div class="line">若A为假,则B必为假</div><div class="line">若A为假,则B必为真</div></pre></td></tr></table></figure></p>
<p>一般要求求出是否可同时满足这m个限制,或是求出一组同时满足这些限制的解。</p>
<p>一般的解法是,对于每个布尔变量ai,我们把它拆成两个点ai和ai’,分别代表为真和为假的状态。于是原题就变成了在2n个点中选取n个点。</p>
<p>然后对于上述4种限制,我们可以转换并连边为<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">若选A,则必选B (从A到B连边)</div><div class="line">若选A,则必选B* (从A到B*连边)</div><div class="line">若选A*,则必选B*(从A*到B*连边)</div><div class="line">若选A*,则必选B (从A*到B连边)</div></pre></td></tr></table></figure></p>
<p>同时需要注意到,由于每个变量只可能同时有一个状态(即2-sat的对称性),当我们连了一条A到B’的边时,我们还必须连一条B到A’的边。因为选A就必须选B,若选了B’再选A的话我们还要选B,而B和B’是无法同时选的。其他的连边类似。</p>
<p>特殊的,在某种情况下我们会遇到必须选A的情景。这时候我们可以连一条由A’到A的边,限制住必须选A。</p>
<p>将边都连完后,我们就得到了一张有向图,这张图中可能一些环,因此我们需要缩点。我们用tarjan求出所有的强连通分量,易得在同一个强连通分量中的点要么同时都选,要么同时都不选。因此我们只要看一下有没有对应点存在于同一个强连通分量中即可判断是否有解(因为每对对应点都必须选且只能选一个)。</p>
<p>对于要求输出一组解的情况,一般的方法是对已缩完点的图建立反图,对反图进行拓扑排序然后染色,将出度为0的点染成红色,并将它们的对应点以及其前驱都染成蓝色,当所有点都染色完毕后,所有红色的点就是一组解。</p>
<p>然而还有更简便的方法:当我们用tarjan进行缩点的时候,所有强连通分量求出的顺序就是原图的逆拓扑序,由此我们省略了建立反图和拓扑排序。再者,根据2-sat的对称性,对于每一对对应点我们都选所在联通块时间戳更小的,这样对于大的那个点,其前驱必定是所在点对中时间戳大的。这样,我们只需一遍tarjan即可求出一组解。</p>
<p>对于一些题目,要求求出字典序最小的点。对于这样的题目,我们无法缩点解决,似乎唯一可行的方案就是爆搜。。。不过poj的六道题中是没有这样的题的。</p>
<blockquote>
<p>PS:对于2-sat的一些更专业的介绍和对称性的证明可以参考《由对称性解2-SAT问 题》(伍昱)和《2-SAT解法浅析》(赵爽) <del>反正我是看不懂就是了</del></p>
</blockquote>
<p>附上poj上的6到题以及我的渣题解</p>
<p><a href="http://poj.org/problem?id=3207" target="_blank" rel="external">poj3207</a>——————<a href="https://butwedo.space/poj/poj3678_poj3207/">题解</a></p>
<p><a href="http://poj.org/problem?id=3678" target="_blank" rel="external">poj3678</a>——————<a href="https://butwedo.space/poj/poj3678_poj3207/">题解</a></p>
<p><a href="http://poj.org/problem?id=2723" target="_blank" rel="external">poj2723</a>—————— <a href="https://butwedo.space/poj/poj2723/">题解</a></p>
<p><a href="http://poj.org/problem?id=3683" target="_blank" rel="external">poj3683</a>—————— <a href="https://butwedo.space/poj/poj3853/">题解</a></p>
<p><a href="http://poj.org/problem?id=3648" target="_blank" rel="external">poj3648</a>—————— <a href="https://butwedo.space/poj/poj3648/">题解</a></p>
<p><a href="http://poj.org/problem?id=2749" target="_blank" rel="external">poj2749</a>—————— <a href="https://butwedo.space/poj/poj2749/">题解</a></p>
]]></content>
<categories>
<category> 算法 </category>
</categories>
<tags>
<tag> 2-SAT </tag>
<tag> 总结 </tag>
</tags>
</entry>
<entry>
<title><![CDATA[luogu3452-POI]]></title>
<url>/luogu/luogu3452-POI/</url>
<content type="html"><![CDATA[<p>题意:给出一个图(N个点,M条边),让你把此图分成尽可能多的集合,满足任意不在同一集合的点之间都有边相连。</p>
<a id="more"></a>
<p>很明显最多的集合数就是联通块的数量,所以我们只要求出联通块的数量以及每个联通块的大小就行了。我第一个想到的做法是$n^2$建出反图,然后bfs。然后看到n的范围(2<=n<=100 000)果断放弃。然后就放着了。今天又碰到,在网上查了查题解,发现其实这道题就是个链表优化的暴力。。。。把n个点放到一个链表里,每次取表头,把不和它相连的点和它自己在链表里删掉并加进一个队列进行bfs,重复这个过程,直到链表为空,我们就得到了联通块的个数,每个联通块的大小可以在bfs时求得。</p>
<figure class="highlight cpp"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div><div class="line">49</div><div class="line">50</div><div class="line">51</div><div class="line">52</div><div class="line">53</div><div class="line">54</div><div class="line">55</div><div class="line">56</div><div class="line">57</div><div class="line">58</div><div class="line">59</div><div class="line">60</div><div class="line">61</div><div class="line">62</div><div class="line">63</div><div class="line">64</div><div class="line">65</div><div class="line">66</div><div class="line">67</div><div class="line">68</div><div class="line">69</div><div class="line">70</div><div class="line">71</div><div class="line">72</div><div class="line">73</div><div class="line">74</div><div class="line">75</div></pre></td><td class="code"><pre><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><iostream></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstdio></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstring></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><algorithm></span></span></div><div class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</div><div class="line"><span class="keyword">int</span> lst[<span class="number">100005</span>],pre[<span class="number">100005</span>];</div><div class="line"><span class="keyword">int</span> tot,had[<span class="number">100005</span>],nxt[<span class="number">40000006</span>],point[<span class="number">4000006</span>];</div><div class="line"><span class="keyword">int</span> n,m;</div><div 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> x,<span class="keyword">int</span> y)</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> tot++;</div><div class="line"> point[tot]=y;</div><div class="line"> nxt[tot]=had[x];</div><div class="line"> had[x]=tot;</div><div class="line"> tot++;</div><div class="line"> point[tot]=x;</div><div class="line"> nxt[tot]=had[y];</div><div class="line"> had[y]=tot;</div><div class="line">}</div><div class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">void</span> <span class="title">del</span><span class="params">(<span class="keyword">int</span> x)</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> lst[pre[x]]=lst[x];</div><div class="line"> pre[lst[x]]=pre[x];</div><div class="line">}</div><div class="line"><span class="keyword">int</span> ans=<span class="number">0</span>,a[<span class="number">100005</span>];</div><div class="line"><span class="keyword">int</span> que[<span class="number">100005</span>];</div><div class="line"><span class="keyword">bool</span> vis[<span class="number">100005</span>];</div><div class="line"><span class="keyword">int</span> h,t;</div><div class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">void</span> <span class="title">bfs</span><span class="params">(<span class="keyword">int</span> x)</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> h=t=<span class="number">0</span>;</div><div class="line"> que[t++]=x;</div><div class="line"> <span class="keyword">while</span>(t!=h)</div><div class="line"> {</div><div class="line"> <span class="keyword">int</span> x=que[h++];</div><div class="line"> a[ans]++;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=had[x];i;i=nxt[i])</div><div class="line"> vis[point[i]]=<span class="number">1</span>;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=lst[<span class="number">0</span>];i<=n;i=lst[i])</div><div class="line"> {</div><div class="line"> <span class="keyword">if</span>(vis[i])</div><div class="line"> {</div><div class="line"> vis[i]=<span class="number">0</span>;</div><div class="line"> <span class="keyword">continue</span>;</div><div class="line"> }</div><div class="line"> del(i);</div><div class="line"> que[t++]=i;</div><div class="line"> }</div><div class="line"> }</div><div class="line">}</div><div class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="built_in">scanf</span>(<span class="string">"%d%d"</span>,&n,&m);</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<=n;i++)</div><div class="line"> lst[i]=i+<span class="number">1</span>;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<=n+<span class="number">1</span>;i++)</div><div class="line"> pre[i]=i<span class="number">-1</span>;</div><div class="line"> <span class="keyword">int</span> x,y;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<=m;i++)</div><div class="line"> {</div><div class="line"> <span class="built_in">scanf</span>(<span class="string">"%d%d"</span>,&x,&y);</div><div class="line"> add(x,y);</div><div class="line"> }</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=lst[<span class="number">0</span>];i<=n;i=lst[<span class="number">0</span>])</div><div class="line"> {</div><div class="line"> del(i);</div><div class="line"> ans++;</div><div class="line"> bfs(i);</div><div class="line"> }</div><div class="line"> sort(a+<span class="number">1</span>,a+<span class="number">1</span>+ans);</div><div class="line"> <span class="built_in">printf</span>(<span class="string">"%d\n"</span>,ans);</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<=ans;i++)</div><div class="line"> <span class="built_in">printf</span>(<span class="string">"%d "</span>,a[i]);</div><div class="line"> <span class="keyword">return</span> <span class="number">0</span>; </div><div class="line">}</div></pre></td></tr></table></figure>
]]></content>
<categories>
<category> luogu </category>
</categories>
<tags>
<tag> POI </tag>
<tag> 链表 </tag>
<tag> bfs </tag>
</tags>
</entry>
<entry>
<title><![CDATA[luogu3539-POI]]></title>
<url>/luogu/luogu3539-POI/</url>
<content type="html"><![CDATA[<p>思路来源于黄学长.</p>
<p>由于<code>f[i]*2=f[i]+f[i-1]+f[i-2]=f[i+1]+f[i-1]</code>所以可得一定存在一组解使得每个斐波那契数最多只会出现一次。</p>
<a id="more"></a>
<p>我们按照这个思路来记忆化搜索。对于一个数可能由比它大的数转移而来也可能由比它小的数转移而来,且<del>感性理解</del>易证这个数一定是由大于它或小于它的第一个的斐波那契数转移而来。因此我们有转移方程f[x]=min(f[x-x1],f[x2-x])+1(其中x1为小于x的第一个斐波那契数,x2为大于x的第一个斐波那契数)。</p>
<figure class="highlight cpp"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div></pre></td><td class="code"><pre><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><iostream></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstring></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstdio></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><map></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><algorithm></span></span></div><div class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</div><div class="line"><span class="keyword">long</span> <span class="keyword">long</span> f[<span class="number">100</span>];</div><div class="line"><span class="built_in">map</span><<span class="keyword">long</span> <span class="keyword">long</span> ,<span class="keyword">int</span>> mp;</div><div class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">void</span> <span class="title">tabl</span><span class="params">()</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> f[<span class="number">0</span>]=<span class="number">1</span>;</div><div class="line"> f[<span class="number">1</span>]=<span class="number">1</span>;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">2</span>;i<=<span class="number">90</span>;i++)</div><div class="line"> f[i]=f[i<span class="number">-1</span>]+f[i<span class="number">-2</span>];</div><div class="line">}</div><div class="line"><span class="keyword">int</span> n;</div><div class="line"><span class="keyword">long</span> <span class="keyword">long</span> x;</div><div class="line"><span class="function"><span class="keyword">int</span> <span class="title">dp</span><span class="params">(<span class="keyword">long</span> <span class="keyword">long</span> x)</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="keyword">if</span>(mp[x])<span class="keyword">return</span> mp[x];</div><div class="line"> <span class="keyword">int</span> b=lower_bound(f,f+<span class="number">90</span>,x)-f;</div><div class="line"> <span class="keyword">if</span>(f[b]==x)<span class="keyword">return</span> <span class="number">1</span>;</div><div class="line"> <span class="keyword">return</span> mp[x]=min(dp(f[b]-x),dp(x-f[b<span class="number">-1</span>]))+<span class="number">1</span>;</div><div class="line">}</div><div class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> tabl();</div><div class="line"> <span class="built_in">scanf</span>(<span class="string">"%d"</span>,&n);</div><div class="line"> <span class="keyword">while</span>(n--)</div><div class="line"> {</div><div class="line"> <span class="built_in">scanf</span>(<span class="string">"%lld"</span>,&x);</div><div class="line"> <span class="built_in">printf</span>(<span class="string">"%d\n"</span>,dp(x));</div><div class="line"> }</div><div class="line"> <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line">}</div></pre></td></tr></table></figure>
]]></content>
<categories>
<category> luogu </category>
</categories>
<tags>
<tag> DP </tag>
<tag> POI </tag>
<tag> 斐波那契 </tag>
</tags>
</entry>
<entry>
<title><![CDATA[luogu3431-POI]]></title>
<url>/luogu/luogu3431/</url>
<content type="html"><![CDATA[<p>第一道传说中的二维偏序!</p>
<a id="more"></a>
<p>题目本身是一个很经典的模型,事实上只要把n和m的数据范围缩成1000左右,就是一个o(nm)的DP入门题。然而这道题的数据范围显然这样时间和空间都会爆炸。于是经过观察我们发现k很小,是一个可以接受的数据范围,所以我们从k入手,只考虑有人的那些点。易得当(i,j)的答案可被(x,y)更新需满足的条件为i>=x且j>=y。我们开一个结构体记录一下有人的点的坐标,把他们按照x排序一下,就能保证x的单增。然后我们考虑y的顺序。首先肯定是要把y离散化一下,然后我们定义f[i]表示按x排序后前i个点里选一定要选点i时的最优解,可得方程为<code>f[i]=max(f[j])+a[i](1<=j<=i)</code>,其中a[i]表示第i个点的人数,于是我们只要快速的求出满足y小于等于当前点中的f最大的点就行了。这里我们用树状数组来维护。</p>
<p>事实上根本不用f数组,直接用一个变量记录即可。</p>
<p>贴出代码:</p>
<figure class="highlight cpp"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div><div class="line">49</div><div class="line">50</div><div class="line">51</div><div class="line">52</div><div class="line">53</div><div class="line">54</div><div class="line">55</div><div class="line">56</div></pre></td><td class="code"><pre><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><iostream></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstdio></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstring></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><algorithm></span></span></div><div class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</div><div class="line"><span class="keyword">long</span> <span class="keyword">long</span> f[<span class="number">1000000</span>];</div><div class="line"><span class="keyword">long</span> <span class="keyword">long</span> z[<span class="number">1000000</span>];</div><div class="line"><span class="function"><span class="keyword">long</span> <span class="keyword">long</span> <span class="title">lowbit</span><span class="params">(<span class="keyword">long</span> <span class="keyword">long</span> x)</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="keyword">return</span> x&-x;</div><div class="line">}</div><div class="line"><span class="keyword">long</span> <span class="keyword">long</span> n,m,k;</div><div class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">long</span> <span class="keyword">long</span> <span class="title">ask</span><span class="params">(<span class="keyword">long</span> <span class="keyword">long</span> x)</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="keyword">long</span> <span class="keyword">long</span> r=<span class="number">0</span>;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">long</span> <span class="keyword">long</span> i=x;i><span class="number">0</span>;i-=lowbit(i))</div><div class="line"> r=max(r,f[i]);</div><div class="line"> <span class="keyword">return</span> r;</div><div class="line">}</div><div 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">long</span> <span class="keyword">long</span> x,<span class="keyword">long</span> <span class="keyword">long</span> v)</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">long</span> <span class="keyword">long</span> i=x;i<=k;i+=lowbit(i))</div><div class="line"> f[i]=max(f[i],v);</div><div class="line">}</div><div class="line"><span class="class"><span class="keyword">struct</span> <span class="title">point</span>{</span></div><div class="line"> <span class="keyword">long</span> <span class="keyword">long</span> x,y;</div><div class="line"> <span class="keyword">long</span> <span class="keyword">long</span> num;</div><div class="line">}p[<span class="number">1000000</span>];</div><div class="line"><span class="function"><span class="keyword">bool</span> <span class="title">cmp</span><span class="params">(point a,point b)</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="keyword">if</span>(a.x==b.x)<span class="keyword">return</span> a.y<b.y;</div><div class="line"> <span class="keyword">return</span> a.x<b.x;</div><div class="line">}</div><div class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="built_in">scanf</span>(<span class="string">"%lld%lld%lld"</span>,&n,&m,&k);</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">long</span> <span class="keyword">long</span> i=<span class="number">1</span>;i<=k;i++)</div><div class="line"> {</div><div class="line"> <span class="built_in">scanf</span>(<span class="string">"%lld%lld%lld"</span>,&p[i].x,&p[i].y,&p[i].num);</div><div class="line"> z[i]=p[i].y;</div><div class="line"> }</div><div class="line"> sort(z+<span class="number">1</span>,z+k+<span class="number">1</span>);</div><div class="line"> n=unique(z+<span class="number">1</span>,z+<span class="number">1</span>+k)-z<span class="number">-1</span>;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">long</span> <span class="keyword">long</span> i=<span class="number">1</span>;i<=k;i++)</div><div class="line"> p[i].y=lower_bound(z+<span class="number">1</span>,z+<span class="number">1</span>+n,p[i].y)-z;</div><div class="line"> sort(p+<span class="number">1</span>,p+<span class="number">1</span>+k,cmp);</div><div class="line"> <span class="keyword">long</span> <span class="keyword">long</span> ans=<span class="number">0</span>;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">long</span> <span class="keyword">long</span> i=<span class="number">1</span>;i<=k;i++)</div><div class="line"> {</div><div class="line"> <span class="keyword">long</span> <span class="keyword">long</span> x=ask(p[i].y)+p[i].num;</div><div class="line"> ans=max(ans,x);</div><div class="line"> add(p[i].y,x);</div><div class="line"> }</div><div class="line"> <span class="built_in">printf</span>(<span class="string">"%lld"</span>,ans);</div><div class="line"> <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line">}</div></pre></td></tr></table></figure>
<p>一开始WA了好几次,发现都是n和k弄混了。。。。都换过来就A了QAQ</p>
]]></content>
<categories>
<category> luogu </category>
</categories>
<tags>
<tag> POI </tag>
<tag> 树状数组 </tag>
<tag> 二维偏序 </tag>
</tags>
</entry>
<entry>
<title><![CDATA[luogu3512-POI]]></title>
<url>/luogu/luogu3512-POI/</url>
<content type="html"><![CDATA[<p>可能我太弱了吧,这么水的题做了半天qwq。。。。</p>
<a id="more"></a>
<p>关于数据范围n<=3000000我们可以联想到这大概是一道O(n)做法的题,然而我也就只想到了这儿,查题解发现开两个单调队列扫过去就好了。</p>
<p>易得这道题所求的子序列l是单增的,所以我们开两个单调队列,一个单增一个单减,分别维护l到当前的最小和最大值,并且在不合法时将l右挪。每读进一个数,我们就把它和队尾比较一下,拿单增序列为例,若当前队尾的数大于新读入的,就把队尾弹出,直到队尾小于当前值;单减则反之。这样,两个队头就记录了l到当前位置的最值。将它们做差,判断是否合法,若不合法则弹出两个队首中对应l更靠前的并更新l,得到i-l+1即为当前答案,比较更新即可。</p>
<figure class="highlight cpp"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div></pre></td><td class="code"><pre><div class="line"><span class="comment">//代码参考黄学长</span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><iostream></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstring></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstdio></span></span></div><div class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</div><div class="line"><span class="keyword">int</span> qn[<span class="number">3000006</span>];</div><div class="line"><span class="keyword">int</span> qx[<span class="number">3000006</span>];</div><div class="line"><span class="keyword">int</span> a[<span class="number">3000006</span>];</div><div class="line"><span class="keyword">int</span> ns=<span class="number">1</span>,ne,xs=<span class="number">1</span>,xe;</div><div class="line"><span class="keyword">int</span> ans;</div><div class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="keyword">int</span> n,k;</div><div class="line"> <span class="built_in">scanf</span>(<span class="string">"%d%d"</span>,&k,&n);</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<=n;i++)</div><div class="line"> <span class="built_in">scanf</span>(<span class="string">"%d"</span>,&a[i]);</div><div class="line"> <span class="keyword">int</span> t=<span class="number">1</span>;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<=n;i++)</div><div class="line"> {</div><div class="line"> <span class="keyword">while</span>(ne>=ns&&a[i]<=a[qn[ne]])ne--;</div><div class="line"> <span class="keyword">while</span>(xe>=xs&&a[i]>=a[qx[xe]])xe--;</div><div class="line"> qn[++ne]=i;</div><div class="line"> qx[++xe]=i;</div><div class="line"> <span class="keyword">while</span>(a[qx[xs]]-a[qn[ns]]>k)</div><div class="line"> <span class="keyword">if</span>(qx[xs]<qn[ns])t=qx[xs]+<span class="number">1</span>,xs++;</div><div class="line"> <span class="keyword">else</span> t=qn[ns]+<span class="number">1</span>,ns++;</div><div class="line"> ans=max(ans,i-t+<span class="number">1</span>);</div><div class="line"> }</div><div class="line"> <span class="built_in">printf</span>(<span class="string">"%d"</span>,ans);</div><div class="line"> <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line">}</div></pre></td></tr></table></figure>
<p>今天才发现自己还不能分清哪儿是队首哪儿是队尾连题解都看不懂QAQ</p>
]]></content>
<categories>
<category> luogu </category>
</categories>
<tags>
<tag> POI </tag>
<tag> 单调队列 </tag>
</tags>
</entry>
<entry>
<title><![CDATA[luogu3545(POI)]]></title>
<url>/luogu/luogu3545-POI/</url>
<content type="html"><![CDATA[<p>POI中的水题,我们尽可能多的去满足顾客,直到当前顾客不能被满足,我们就找到之前需求最大的的顾客,然后判断一下与当前顾客谁的需求更大一些,若当前顾客需求大则跳过他,否则踢掉之前需求最大的顾客,来满足当前顾客。这样答案不会变得更差,而且我们还有了更多的货物更有可能满足后来的人。“找到之前需求最大的顾客”我们可以用堆来实现。整个过程时间复杂度为O(nlogn).</p>
<a id="more"></a>
<figure class="highlight cpp"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div><div class="line">49</div><div class="line">50</div><div class="line">51</div><div class="line">52</div><div class="line">53</div><div class="line">54</div><div class="line">55</div><div class="line">56</div><div class="line">57</div><div class="line">58</div><div class="line">59</div><div class="line">60</div><div class="line">61</div><div class="line">62</div><div class="line">63</div><div class="line">64</div></pre></td><td class="code"><pre><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><iostream></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstring></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstdio></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><queue></span></span></div><div class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</div><div class="line"><span class="keyword">long</span> <span class="keyword">long</span> a[<span class="number">250004</span>],b[<span class="number">250005</span>];</div><div class="line"><span class="keyword">long</span> <span class="keyword">long</span> n;</div><div class="line"><span class="keyword">long</span> <span class="keyword">long</span> rest;</div><div class="line"><span class="keyword">long</span> <span class="keyword">long</span> k;</div><div class="line"><span class="class"><span class="keyword">struct</span> <span class="title">dou</span></span></div><div class="line"><span class="class">{</span></div><div class="line"> <span class="keyword">long</span> <span class="keyword">long</span> num,val;</div><div class="line">};</div><div class="line"><span class="keyword">bool</span> <span class="keyword">operator</span> > (dou x,dou y)</div><div class="line">{</div><div class="line"> <span class="keyword">return</span> x.val>y.val;</div><div class="line">}</div><div class="line"><span class="keyword">bool</span> <span class="keyword">operator</span> < (dou x,dou y)</div><div class="line">{</div><div class="line"> <span class="keyword">return</span> x.val<y.val;</div><div class="line">}</div><div class="line">priority_queue<dou> q;</div><div class="line"><span class="keyword">long</span> <span class="keyword">long</span> ans;</div><div class="line"><span class="keyword">bool</span> vis[<span class="number">250005</span>];</div><div class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="built_in">scanf</span>(<span class="string">"%d"</span>,&n);</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">long</span> <span class="keyword">long</span> i=<span class="number">1</span>;i<=n;i++)</div><div class="line"> <span class="built_in">scanf</span>(<span class="string">"%d"</span>,&a[i]);</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">long</span> <span class="keyword">long</span> i=<span class="number">1</span>;i<=n;i++)</div><div class="line"> <span class="built_in">scanf</span>(<span class="string">"%d"</span>,&b[i]);</div><div class="line"> dou t;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">long</span> <span class="keyword">long</span> i=<span class="number">1</span>;i<=n;i++)</div><div class="line"> {</div><div class="line"> rest+=a[i];</div><div class="line"> <span class="keyword">if</span>(rest>=b[i])</div><div class="line"> {</div><div class="line"> ans++;</div><div class="line"> rest-=b[i];</div><div class="line"> t.val=b[i];</div><div class="line"> t.num=i;</div><div class="line"> vis[i]=<span class="number">1</span>;</div><div class="line"> q.push(t);</div><div class="line"> } </div><div class="line"> <span class="keyword">else</span></div><div class="line"> {</div><div class="line"> <span class="keyword">if</span>(q.empty())<span class="keyword">continue</span>;</div><div class="line"> t=q.top();</div><div class="line"> <span class="keyword">if</span>(b[i]>=t.val)<span class="keyword">continue</span>;</div><div class="line"> q.pop();</div><div class="line"> rest+=t.val;</div><div class="line"> rest-=b[i];</div><div class="line"> vis[t.num]=<span class="number">0</span>;</div><div class="line"> vis[i]=<span class="number">1</span>;</div><div class="line"> t.num=i;</div><div class="line"> t.val=b[i];</div><div class="line"> q.push(t);</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="built_in">printf</span>(<span class="string">"%d\n"</span>,ans);</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">long</span> <span class="keyword">long</span> i=<span class="number">1</span>;i<=n;i++)</div><div class="line"> <span class="keyword">if</span>(vis[i]) <span class="built_in">printf</span>(<span class="string">"%d "</span>,i);</div><div class="line"> <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line">}</div></pre></td></tr></table></figure>
]]></content>
<categories>
<category> luogu </category>
</categories>
<tags>
<tag> 贪心 </tag>
<tag> 水题 </tag>
<tag> POI </tag>
</tags>
</entry>
<entry>
<title><![CDATA[luogu2444(POI)]]></title>
<url>/luogu/luogu2444-POI/</url>
<content type="html"><![CDATA[<p>这是一道对于AC自动机很好的一个应用。</p>
<a id="more"></a>
<p>正常情况下,我们都是希望字符串尽可能的去匹配,这道题则是在匹配完成之前尽可能地转移。于是按照AC自动机的思路我们先建出trie树并构造出fail指针,然后从根开始深搜,如果搜到一个环则我们可以在这个环上不断地构建安全代码,否则无解。在深搜时要注意,我们只能向安全节点(无结束标记的节点)转移。</p>
<figure class="highlight cpp"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div><div class="line">49</div><div class="line">50</div><div class="line">51</div><div class="line">52</div><div class="line">53</div><div class="line">54</div><div class="line">55</div><div class="line">56</div><div class="line">57</div><div class="line">58</div><div class="line">59</div><div class="line">60</div><div class="line">61</div><div class="line">62</div><div class="line">63</div><div class="line">64</div><div class="line">65</div><div class="line">66</div><div class="line">67</div><div class="line">68</div><div class="line">69</div><div class="line">70</div><div class="line">71</div><div class="line">72</div><div class="line">73</div><div class="line">74</div><div class="line">75</div><div class="line">76</div><div class="line">77</div><div class="line">78</div><div class="line">79</div><div class="line">80</div><div class="line">81</div><div class="line">82</div><div class="line">83</div></pre></td><td class="code"><pre><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><iostream></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstring></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstdio></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><queue></span></span></div><div class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</div><div class="line"><span class="class"><span class="keyword">struct</span> <span class="title">trie</span>{</span></div><div class="line"> <span class="keyword">int</span> nxt[<span class="number">2</span>];</div><div class="line"> <span class="keyword">int</span> fail;</div><div class="line"> <span class="keyword">int</span> nd;</div><div class="line">};</div><div class="line"><span class="keyword">int</span> tot;</div><div class="line">trie ac[<span class="number">30400</span>];</div><div class="line"><span class="keyword">int</span> n;</div><div class="line"><span class="keyword">char</span> ch[<span class="number">2003</span>];</div><div 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">char</span> *c)</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="keyword">int</span> len=<span class="built_in">strlen</span>(c);</div><div class="line"> <span class="keyword">int</span> k=<span class="number">0</span>;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<len;i++)</div><div class="line"> {</div><div class="line"> <span class="keyword">int</span> j=c[i]-<span class="string">'0'</span>;</div><div class="line"> <span class="keyword">if</span>(ac[k].nxt[j]==<span class="number">0</span>)</div><div class="line"> ac[k].nxt[j]=++tot;</div><div class="line"> k=ac[k].nxt[j];</div><div class="line"> }</div><div class="line"> ac[k].nd++;</div><div class="line">}</div><div class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">void</span> <span class="title">find_fail</span><span class="params">()</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="built_in">queue</span><<span class="keyword">int</span>>q;</div><div class="line"> <span class="keyword">int</span> r=<span class="number">0</span>;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<<span class="number">2</span>;i++)</div><div class="line"> {</div><div class="line"> <span class="keyword">if</span>(ac[r].nxt[i])q.push(ac[r].nxt[i]);</div><div class="line"> ac[ac[r].nxt[i]].fail=<span class="number">0</span>;</div><div class="line"> }</div><div class="line"> <span class="keyword">while</span>(!q.empty())</div><div class="line"> {</div><div class="line"> <span class="keyword">int</span> t=q.front();</div><div class="line"> q.pop();</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<<span class="number">2</span>;i++)</div><div class="line"> {</div><div class="line"> <span class="keyword">if</span>(ac[t].nxt[i])</div><div class="line"> {</div><div class="line"> ac[ac[t].nxt[i]].fail=ac[ac[t].fail].nxt[i];</div><div class="line"> q.push(ac[t].nxt[i]);</div><div class="line"> }</div><div class="line"> <span class="keyword">else</span> ac[t].nxt[i]=ac[ac[t].fail].nxt[i];</div><div class="line"> <span class="keyword">if</span>(ac[ac[t].fail].nd)ac[t].nd=<span class="number">1</span>;</div><div class="line"> }</div><div class="line"> }</div><div class="line">}</div><div class="line"><span class="keyword">int</span> vis[<span class="number">32500</span>];</div><div class="line"><span class="keyword">int</span> acn[<span class="number">32099</span>];</div><div class="line"><span class="function"><span class="keyword">void</span> <span class="title">dfs</span><span class="params">(<span class="keyword">int</span> d)</span></span></div><div class="line"><span class="function"></span>{ </div><div class="line"> vis[d]=<span class="number">1</span>;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<=<span class="number">1</span>;i++) </div><div class="line"> <span class="keyword">if</span>(vis[ac[d].nxt[i]])</div><div class="line"> { </div><div class="line"> <span class="built_in">printf</span>(<span class="string">"TAK"</span>);</div><div class="line"> <span class="built_in">exit</span>(<span class="number">0</span>); </div><div class="line"> }</div><div class="line"> <span class="keyword">else</span> <span class="keyword">if</span>(ac[ac[d].nxt[i]].nd==<span class="number">0</span>&&acn[ac[d].nxt[i]]==<span class="number">0</span>)</div><div class="line"> {</div><div class="line"> acn[ac[d].nxt[i]]=<span class="number">1</span>;</div><div class="line"> dfs(ac[d].nxt[i]);</div><div class="line"> }</div><div class="line"> vis[d]=<span class="number">0</span>; </div><div class="line">}</div><div class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="built_in">scanf</span>(<span class="string">"%d"</span>,&n);</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<=n;i++)</div><div class="line"> {</div><div class="line"> <span class="built_in">scanf</span>(<span class="string">"%s"</span>,ch);</div><div class="line"> add(ch);</div><div class="line"> }</div><div class="line"> find_fail();</div><div class="line"> dfs(<span class="number">0</span>);</div><div class="line"> <span class="built_in">printf</span>(<span class="string">"NIE"</span>);</div><div class="line"> <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line">}</div></pre></td></tr></table></figure>
]]></content>
<categories>
<category> luogu </category>
</categories>
<tags>
<tag> POI </tag>
<tag> AC自动机 </tag>
</tags>
</entry>
<entry>
<title><![CDATA[luogu3420(POI)]]></title>
<url>/luogu/luogu3420-POI/</url>
<content type="html"><![CDATA[<p>POI中的大大大水题,做法很多,最最麻烦的可以tarjan缩点之后判断有多少入度为0的点,简单的话可以直接深搜,反正我是随手敲了一个并查集,因为错误的数据范围WA了一次然后1A。</p>
<a id="more"></a>
<p><strong>注意:本题不能只开100000的数组!!!</strong></p>
<figure class="highlight cpp"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div></pre></td><td class="code"><pre><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><iostream></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstring></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstdio> </span></span></div><div class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</div><div class="line"><span class="keyword">int</span> fa[<span class="number">1000005</span>];</div><div class="line"><span class="keyword">int</span> n;</div><div class="line"><span class="function"><span class="keyword">int</span> <span class="title">gef</span><span class="params">(<span class="keyword">int</span> x)</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="keyword">if</span>(fa[x]==x)<span class="keyword">return</span> x;</div><div class="line"> <span class="keyword">else</span> <span class="keyword">return</span> fa[x]=gef(fa[x]);</div><div class="line">}</div><div class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="built_in">scanf</span>(<span class="string">"%d"</span>,&n);</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<=n;i++)</div><div class="line"> fa[i]=i;</div><div class="line"> <span class="keyword">int</span> x;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<=n;i++)</div><div class="line"> {</div><div class="line"> <span class="built_in">scanf</span>(<span class="string">"%d"</span>,&x);</div><div class="line"> <span class="keyword">int</span> fx=gef(x);</div><div class="line"> <span class="keyword">int</span> y=gef(i);</div><div class="line"> <span class="keyword">if</span>(fx!=y)fa[y]=fx;</div><div class="line"> }</div><div class="line"> <span class="keyword">int</span> ans=<span class="number">0</span>;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<=n;i++)</div><div class="line"> <span class="keyword">if</span>(fa[i]==i)ans++;</div><div class="line"> <span class="built_in">printf</span>(<span class="string">"%d"</span>,ans);</div><div class="line"> <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line">}</div></pre></td></tr></table></figure>
]]></content>
<categories>
<category> luogu </category>
</categories>
<tags>
<tag> 水题 </tag>
<tag> POI </tag>
<tag> 并查集 </tag>
</tags>
</entry>
<entry>
<title><![CDATA[poj3683]]></title>
<url>/poj/poj3853/</url>
<content type="html"><![CDATA[<p>昨天做这道题的时候各种错误,今天早上终于调好了。</p>
<a id="more"></a>
<p>原来也刷过几道2-sat的题,不过输出方案的这是第一道。本来2-sat输出方案的传统做法是先缩点,再建反图拓扑排个序,然后再染色,将红色点输出,然而昨天查资料的时候发现,其实在tarjan求强连通的时候,每个强联通分量的求出顺序就是原图的逆拓扑序!所以我们根本就不用再拓扑排序。接着,根据对称性,若原题有解的话,根据2-sat的对称性,我们只需在两个对应点之间找所属强连通分量时间戳更小的就行了,这样得出的就一定是一组可行解。</p>
<p><a href="http://poj.org/problem?id=3683" target="_blank" rel="external">题目链接</a>。</p>
<figure class="highlight cpp"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div><div class="line">49</div><div class="line">50</div><div class="line">51</div><div class="line">52</div><div class="line">53</div><div class="line">54</div><div class="line">55</div><div class="line">56</div><div class="line">57</div><div class="line">58</div><div class="line">59</div><div class="line">60</div><div class="line">61</div><div class="line">62</div><div class="line">63</div><div class="line">64</div><div class="line">65</div><div class="line">66</div><div class="line">67</div><div class="line">68</div><div class="line">69</div><div class="line">70</div><div class="line">71</div><div class="line">72</div><div class="line">73</div><div class="line">74</div><div class="line">75</div><div class="line">76</div><div class="line">77</div><div class="line">78</div><div class="line">79</div><div class="line">80</div><div class="line">81</div><div class="line">82</div><div class="line">83</div><div class="line">84</div><div class="line">85</div><div class="line">86</div><div class="line">87</div><div class="line">88</div><div class="line">89</div><div class="line">90</div><div class="line">91</div><div class="line">92</div><div class="line">93</div><div class="line">94</div><div class="line">95</div></pre></td><td class="code"><pre><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><iostream></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstdio></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><stack></span></span></div><div class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</div><div class="line"><span class="keyword">int</span> n;</div><div class="line"><span class="keyword">int</span> tot,had[<span class="number">3000</span>],nxt[<span class="number">5000000</span>],point[<span class="number">5000000</span>];</div><div class="line"><span class="class"><span class="keyword">struct</span> <span class="title">wed</span>{</span></div><div class="line"> <span class="keyword">int</span> bg;</div><div class="line"> <span class="keyword">int</span> nd;</div><div class="line">}p[<span class="number">2003</span>];</div><div 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> x,<span class="keyword">int</span> y)</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> tot++;</div><div class="line"> point[tot]=y;</div><div class="line"> nxt[tot]=had[x];</div><div class="line"> had[x]=tot;</div><div class="line">}</div><div class="line"><span class="keyword">bool</span> vis[<span class="number">3000</span>];</div><div class="line"><span class="keyword">int</span> t;</div><div class="line"><span class="keyword">int</span> timel;</div><div class="line"><span class="keyword">int</span> dfn[<span class="number">3000</span>],low[<span class="number">3000</span>];</div><div class="line"><span class="keyword">int</span> blng[<span class="number">3000</span>];<span class="comment">//强连通分量时间戳 </span></div><div class="line"><span class="built_in">stack</span><<span class="keyword">int</span>>ss;</div><div class="line"><span class="keyword">int</span> ans[<span class="number">2009</span>];</div><div 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></div><div class="line"><span class="function"></span>{</div><div class="line"> dfn[x]=low[x]=++t;</div><div class="line"> vis[x]=t;</div><div class="line"> ss.push(x);</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=had[x];i;i=nxt[i])</div><div class="line"> {</div><div class="line"> <span class="keyword">int</span> to=point[i];</div><div class="line"> <span class="keyword">if</span>(!dfn[to])</div><div class="line"> {</div><div class="line"> tarjan(to);</div><div class="line"> low[x]=min(low[x],low[to]);</div><div class="line"> }</div><div class="line"> <span class="keyword">else</span> <span class="keyword">if</span>(vis[to]) low[x]=min(low[x],dfn[to]);</div><div class="line"> }</div><div class="line"> <span class="keyword">if</span>(low[x]==dfn[x])</div><div class="line"> {</div><div class="line"> timel++;</div><div class="line"> <span class="keyword">while</span>(!ss.empty())</div><div class="line"> {</div><div class="line"> <span class="keyword">int</span> y=ss.top();</div><div class="line"> vis[y]=<span class="number">0</span>;</div><div class="line"> ss.pop();</div><div class="line"> blng[y]=timel;</div><div class="line"> <span class="keyword">if</span>(y==x)<span class="keyword">break</span>;</div><div class="line"> }</div><div class="line"> }</div><div class="line">}</div><div class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="built_in">cin</span>>>n;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<n;i++)<span class="comment">//处理读入 </span></div><div class="line"> {</div><div class="line"> <span class="keyword">int</span> x1,x2,y1,y3,len;</div><div class="line"> <span class="keyword">char</span> c;</div><div class="line"> <span class="built_in">cin</span>>>x1>>c>>x2;</div><div class="line"> <span class="built_in">cin</span>>>y1>>c>>y3>>len;</div><div class="line"> p[i<<<span class="number">1</span>].bg=x1*<span class="number">60</span>+x2;</div><div class="line"> p[i<<<span class="number">1</span>].nd=p[i<<<span class="number">1</span>].bg+len;</div><div class="line"> p[(i<<<span class="number">1</span>)+<span class="number">1</span>].bg=y1*<span class="number">60</span>+y3-len;</div><div class="line"> p[(i<<<span class="number">1</span>)+<span class="number">1</span>].nd=p[(i<<<span class="number">1</span>)+<span class="number">1</span>].bg+len;</div><div class="line"> }</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<<span class="number">2</span>*n;i++)<span class="comment">//建图 </span></div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> j=i+<span class="number">1</span>;j<<span class="number">2</span>*n;j++)</div><div class="line"> <span class="keyword">if</span>(p[i].bg>=p[j].bg&&p[i].bg<p[j].nd)</div><div class="line"> {</div><div class="line"> add(i,j^<span class="number">1</span>);</div><div class="line"> add(j,i^<span class="number">1</span>);</div><div class="line"> }</div><div class="line"> <span class="keyword">else</span></div><div class="line"> <span class="keyword">if</span>(p[j].bg>=p[i].bg&&p[j].bg<p[i].nd)</div><div class="line"> {</div><div class="line"> add(j,i^<span class="number">1</span>);</div><div class="line"> add(i,j^<span class="number">1</span>);</div><div class="line"> }</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<<span class="number">2</span>*n;i++)<span class="comment">//tarjan缩点 </span></div><div class="line"> <span class="keyword">if</span>(!dfn[i])tarjan(i);</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<<span class="number">2</span>*n;i+=<span class="number">2</span>)<span class="comment">//判断是否有解 </span></div><div class="line"> <span class="keyword">if</span>(blng[i]==blng[i+<span class="number">1</span>])</div><div class="line"> {</div><div class="line"> <span class="built_in">cout</span><<<span class="string">"NO"</span>;</div><div class="line"> <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line"> }</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<<span class="number">2</span>*n;i+=<span class="number">2</span>)<span class="comment">//在对应点中选取所属时间戳小的 </span></div><div class="line"> <span class="keyword">if</span>(blng[i]<blng[i+<span class="number">1</span>])ans[i/<span class="number">2</span>]=i;</div><div class="line"> <span class="keyword">else</span> ans[i/<span class="number">2</span>]=i+<span class="number">1</span>;</div><div class="line"> <span class="built_in">cout</span><<<span class="string">"YES\n"</span>;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<n;i++)<span class="comment">//处理并输出 </span></div><div class="line"> <span class="built_in">printf</span>(<span class="string">"%02d:%02d %02d:%02d\n"</span>,p[ans[i]].bg/<span class="number">60</span>,p[ans[i]].bg%<span class="number">60</span>,p[ans[i]].nd/<span class="number">60</span>,p[ans[i]].nd%<span class="number">60</span>);</div><div class="line"> <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line">}</div></pre></td></tr></table></figure>
<p>这题还有一个坑点就是若一场婚礼的结束时间与下一场婚礼的开始时间是一样的的话,我们认为这不冲突。为了这个WA了一次。。。</p>
]]></content>
<categories>
<category> poj </category>
</categories>
<tags>
<tag> 2-SAT </tag>
</tags>
</entry>
<entry>
<title><![CDATA[poj3522]]></title>
<url>/poj/poj3522/</url>
<content type="html"><![CDATA[<p>一道对于最小生成树算法的很不错的应用。</p>
<p>题目要求是给你一张图,求一棵树,要求其 <strong>最大边与最小边的差值</strong> 最小。</p>
<a id="more"></a>
<p>考虑kruskal算法,排序之后我们枚举最小界,然后每次构建最小生成树可以得到最大边,然后不断地更新答案就好了。</p>
<p><a href="http://poj.org/problem?id=3522" target="_blank" rel="external">poj3522</a></p>
<figure class="highlight cpp"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div><div class="line">49</div><div class="line">50</div><div class="line">51</div><div class="line">52</div><div class="line">53</div><div class="line">54</div><div class="line">55</div><div class="line">56</div><div class="line">57</div></pre></td><td class="code"><pre><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><iostream></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstdio></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstring></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><algorithm></span></span></div><div class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</div><div class="line"><span class="class"><span class="keyword">struct</span> <span class="title">dou</span>{</span></div><div class="line"> <span class="keyword">int</span> x,y;</div><div class="line"> <span class="keyword">int</span> w;</div><div class="line">}l[<span class="number">10004</span>];</div><div class="line"><span class="keyword">int</span> fa[<span class="number">103</span>];</div><div class="line"><span class="function"><span class="keyword">bool</span> <span class="title">cmp</span><span class="params">(dou x,dou y)</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="keyword">return</span> x.w<y.w;</div><div class="line">}</div><div class="line"><span class="function"><span class="keyword">int</span> <span class="title">gef</span><span class="params">(<span class="keyword">int</span> x)</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="keyword">if</span>(fa[x]==x)<span class="keyword">return</span> x;</div><div class="line"> <span class="keyword">return</span> fa[x]=gef(fa[x]);</div><div class="line">}</div><div class="line"><span class="keyword">int</span> n,m;</div><div class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="keyword">while</span>((~<span class="built_in">scanf</span>(<span class="string">"%d%d"</span>,&n,&m))&&n)</div><div class="line"> {</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<=m;i++)</div><div class="line"> <span class="built_in">scanf</span>(<span class="string">"%d%d%d"</span>,&l[i].x,&l[i].y,&l[i].w);</div><div class="line"> sort(l+<span class="number">1</span>,l+<span class="number">1</span>+m,cmp);</div><div class="line"> <span class="keyword">int</span> big=l[m].w;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<=m;i++)</div><div class="line"> {</div><div class="line"> <span class="keyword">int</span> j,k;</div><div class="line"> <span class="keyword">for</span>(j=<span class="number">1</span>;j<=n;j++)</div><div class="line"> fa[j]=j;</div><div class="line"> <span class="keyword">for</span>(j=i;j<=m;j++)</div><div class="line"> {</div><div class="line"> <span class="keyword">int</span> x=gef(l[j].x);</div><div class="line"> <span class="keyword">int</span> y=gef(l[j].y);</div><div class="line"> <span class="keyword">if</span>(x!=y) </div><div class="line"> {</div><div class="line"> fa[x]=y;</div><div class="line"> k=j;</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="keyword">int</span> sum=<span class="number">0</span>;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> j=<span class="number">1</span>;j<=n;j++)</div><div class="line"> {</div><div class="line"> fa[j]=gef(fa[j]);</div><div class="line"> <span class="keyword">if</span>(fa[j]==j)sum++;</div><div class="line"> }</div><div class="line"> <span class="keyword">if</span>(sum!=<span class="number">1</span>)<span class="keyword">break</span>;</div><div class="line"> big=min(big,l[k].w-l[i].w);</div><div class="line"> }</div><div class="line"> <span class="keyword">if</span>(big==l[m].w)big=<span class="number">-1</span>;</div><div class="line"> <span class="built_in">printf</span>(<span class="string">"%d\n"</span>,big);</div><div class="line"> }</div><div class="line"> <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line">}</div></pre></td></tr></table></figure>
]]></content>
<categories>
<category> poj </category>
</categories>
<tags>
<tag> 最小生成树 </tag>
</tags>
</entry>
<entry>
<title><![CDATA[bzoj1034]]></title>
<url>/bzoj/bzoj1034/</url>
<content type="html"><![CDATA[<p>应该是改编自USACO的田忌赛马?最好的情况好处理,直接套用田忌赛马思想,排序后从小的开始比较,可以比过就加分,</p>
<a id="more"></a>
<p>不行的话再看最大的能不能比过,能就加分,如果都不行那就用自己最弱的去怼掉对方最强的。对于最坏的情况很明显我们能看出就是对手最好的情况,所以我们按照刚才的策略对对手进行一波贪心,由于不管谁输谁赢或是平局,一局对两人带来的分数总和都是2,所以我们只要用n*2-对手的最优即可得到己方的最坏情况。</p>
<p>题目链接:<a href="http://www.lydsy.com/JudgeOnline/problem.php?id=1034" target="_blank" rel="external">bzoj1034</a></p>
<p>渣代码:</p>
<figure class="highlight cpp"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div></pre></td><td class="code"><pre><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstdio></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><iostream></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><algorithm></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstring></span></span></div><div class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</div><div class="line"><span class="keyword">int</span> n,ans;</div><div class="line"><span class="keyword">int</span> zj[<span class="number">100005</span>],ds[<span class="number">100005</span>];</div><div class="line"><span class="function"><span class="keyword">int</span> <span class="title">solve</span><span class="params">(<span class="keyword">int</span> zj[],<span class="keyword">int</span> ds[])</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="keyword">int</span> zi=<span class="number">1</span>,di=<span class="number">1</span>;</div><div class="line"> <span class="keyword">int</span> zn=n,dn=n;</div><div class="line"> <span class="keyword">int</span> m=n;</div><div class="line"> <span class="keyword">int</span> ans=<span class="number">0</span>;</div><div class="line"> <span class="keyword">while</span>(m--)</div><div class="line"> {</div><div class="line"> <span class="keyword">if</span>(zj[zi]>ds[di])</div><div class="line"> {</div><div class="line"> ans+=<span class="number">2</span>;</div><div class="line"> zi++;</div><div class="line"> di++;</div><div class="line"> }</div><div class="line"> <span class="keyword">else</span> <span class="keyword">if</span>(zj[zn]>ds[dn])</div><div class="line"> {</div><div class="line"> ans+=<span class="number">2</span>;</div><div class="line"> zn--;</div><div class="line"> dn--;</div><div class="line"> }</div><div class="line"> <span class="keyword">else</span> </div><div class="line"> {</div><div class="line"> ans+=(zj[zi]==ds[dn]);</div><div class="line"> zi++;</div><div class="line"> dn--;</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="keyword">return</span> ans;</div><div class="line">}</div><div class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="built_in">scanf</span>(<span class="string">"%d"</span>,&n);</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<=n;i++)</div><div class="line"> <span class="built_in">scanf</span>(<span class="string">"%d"</span>,&zj[i]);</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<=n;i++)</div><div class="line"> <span class="built_in">scanf</span>(<span class="string">"%d"</span>,&ds[i]);</div><div class="line"> sort(zj+<span class="number">1</span>,zj+n+<span class="number">1</span>);</div><div class="line"> sort(ds+<span class="number">1</span>,ds+n+<span class="number">1</span>);</div><div class="line"> <span class="built_in">printf</span>(<span class="string">"%d %d"</span>,solve(zj,ds),<span class="number">2</span>*n-solve(ds,zj));</div><div class="line"> <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line">}</div></pre></td></tr></table></figure>]]></content>
<categories>
<category> bzoj </category>
</categories>
<tags>
<tag> 贪心 </tag>
<tag> 水题 </tag>
</tags>
</entry>
<entry>
<title><![CDATA[poj2060]]></title>
<url>/poj/poj2060/</url>
<content type="html"><![CDATA[<p>有n个任务,给出任务时间和起点终点,每两个点之间的时间花费为其曼哈顿距离,问若要每个任务都按时开始需要多少出租车。</p>
<a id="more"></a>
<p>并不是很难,就是题意理解起来可能会有些问题,反正我当时是WA了几遍之后才发现的,a到b能连边,需满足a的开始时间+到终点花费+从a的终点到b的起点的花费<=b的开始时间<br>将图建好之后就简单了,直接跑一遍匈牙利求最小路径覆盖=总点数-最大匹配即可。</p>
<p>还get到了一个scanf的新用法:<code>scanf("%d:%d",&a,&b)</code>可以直接跳过去中间的’:’直接读入b,当时用的getchar还RE了几遍,用这个就AC了QAQ</p>
<p>附上题目链接:<a href="http://poj.org/problem?id=2060" target="_blank" rel="external">poj2060</a></p>
<figure class="highlight cpp"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div><div class="line">49</div><div class="line">50</div><div class="line">51</div><div class="line">52</div><div class="line">53</div><div class="line">54</div><div class="line">55</div><div class="line">56</div><div class="line">57</div><div class="line">58</div><div class="line">59</div><div class="line">60</div><div class="line">61</div><div class="line">62</div><div class="line">63</div><div class="line">64</div><div class="line">65</div><div class="line">66</div><div class="line">67</div><div class="line">68</div><div class="line">69</div><div class="line">70</div><div class="line">71</div><div class="line">72</div><div class="line">73</div><div class="line">74</div><div class="line">75</div><div class="line">76</div><div class="line">77</div><div class="line">78</div><div class="line">79</div><div class="line">80</div><div class="line">81</div><div class="line">82</div><div class="line">83</div><div class="line">84</div><div class="line">85</div><div class="line">86</div></pre></td><td class="code"><pre><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><iostream></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstdio></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstring></span></span></div><div class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</div><div class="line"><span class="keyword">int</span> tot;</div><div class="line"><span class="keyword">int</span> had[<span class="number">1030</span>],point[<span class="number">500</span>*<span class="number">500</span>+<span class="number">2</span>],nxt[<span class="number">500</span>*<span class="number">500</span>+<span class="number">2</span>];</div><div class="line"><span class="keyword">int</span> fa[<span class="number">1004</span>];</div><div class="line"><span class="keyword">bool</span> vis[<span class="number">1003</span>];</div><div 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> x,<span class="keyword">int</span> y)</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> tot++;</div><div class="line"> point[tot]=y;</div><div class="line"> nxt[tot]=had[x];</div><div class="line"> had[x]=tot;</div><div class="line">}</div><div class="line"><span class="function"><span class="keyword">bool</span> <span class="title">cando</span><span class="params">(<span class="keyword">int</span> x)</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=had[x];i;i=nxt[i])</div><div class="line"> {</div><div class="line"> <span class="keyword">int</span> to=point[i];</div><div class="line"> <span class="keyword">if</span>(!vis[to])</div><div class="line"> {</div><div class="line"> vis[to]=<span class="number">1</span>;</div><div class="line"> <span class="keyword">if</span>(fa[to]==<span class="number">0</span>||cando(fa[to]))</div><div class="line"> {</div><div class="line"> fa[to]=x;</div><div class="line"> <span class="keyword">return</span> <span class="number">1</span>;</div><div class="line"> }</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line">}</div><div class="line"><span class="keyword">int</span> n,m,t;</div><div class="line"><span class="class"><span class="keyword">struct</span> <span class="title">dou</span>{</span></div><div class="line"> <span class="keyword">int</span> stt,nd;</div><div class="line"> <span class="keyword">int</span> s1,s2,e1,e2;</div><div class="line">}p[<span class="number">504</span>];</div><div class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">int</span> <span class="title">ab</span><span class="params">(<span class="keyword">int</span> x)</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="keyword">if</span>(x<<span class="number">0</span>)<span class="keyword">return</span> -x;</div><div class="line"> <span class="keyword">return</span> x;</div><div class="line">}</div><div class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">bool</span> <span class="title">line</span><span class="params">(<span class="keyword">int</span> x,<span class="keyword">int</span> y)</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="keyword">int</span> dis=ab(p[x].e1-p[y].s1)+ab(p[x].e2-p[y].s2);</div><div class="line"> <span class="keyword">if</span>(p[x].nd+dis<p[y].stt)<span class="keyword">return</span> <span class="number">1</span>;</div><div class="line"> <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line">}</div><div class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="built_in">scanf</span>(<span class="string">"%d"</span>,&t);</div><div class="line"> <span class="keyword">while</span>(t--)</div><div class="line"> {</div><div class="line"> <span class="built_in">scanf</span>(<span class="string">"%d"</span>,&n);</div><div class="line"> tot=<span class="number">0</span>;</div><div class="line"> <span class="keyword">int</span> day=<span class="number">0</span>;</div><div class="line"> <span class="built_in">memset</span>(fa,<span class="number">0</span>,<span class="keyword">sizeof</span>(fa));</div><div class="line"> <span class="built_in">memset</span>(had,<span class="number">0</span>,<span class="keyword">sizeof</span>(had));</div><div class="line"> <span class="keyword">int</span> a,b;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<=n;i++)</div><div class="line"> {</div><div class="line"> <span class="built_in">scanf</span>(<span class="string">"%d:%d"</span>,&a,&b);</div><div class="line"> p[i].stt=a*<span class="number">60</span>+b;</div><div class="line"> <span class="built_in">scanf</span>(<span class="string">"%d%d%d%d"</span>,&p[i].s1,&p[i].s2,&p[i].e1,&p[i].e2);</div><div class="line"> p[i].nd=p[i].stt+ab(p[i].s1-p[i].e1)+ab(p[i].s2-p[i].e2);</div><div class="line"> <span class="keyword">while</span>(p[i].stt<p[i<span class="number">-1</span>].stt)</div><div class="line"> {</div><div class="line"> p[i].stt+=<span class="number">24</span>*<span class="number">60</span>;</div><div class="line"> p[i].nd+=<span class="number">24</span>*<span class="number">60</span>;</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<=n;i++)</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> j=i+<span class="number">1</span>;j<=n;j++)</div><div class="line"> <span class="keyword">if</span>(line(i,j))add(i,j+n);</div><div class="line"> <span class="comment">// for(int i=1;i<=n;i++)</span></div><div class="line"> <span class="comment">// cout<<p[i].stt<<' '<<p[i].nd<<endl;</span></div><div class="line"> <span class="keyword">int</span> ans=<span class="number">0</span>;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<=n;i++)</div><div class="line"> {</div><div class="line"> <span class="built_in">memset</span>(vis,<span class="number">0</span>,<span class="keyword">sizeof</span>(vis));</div><div class="line"> <span class="keyword">if</span>(cando(i))ans++;</div><div class="line"> }</div><div class="line"> <span class="built_in">printf</span>(<span class="string">"%d\n"</span>,n-ans);</div><div class="line"> }</div><div class="line"> <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line">}</div></pre></td></tr></table></figure>
]]></content>
<categories>
<category> poj </category>
</categories>
<tags>
<tag> 二分图 </tag>
</tags>
</entry>
<entry>
<title><![CDATA[poj2226]]></title>
<url>/poj/poj2226/</url>
<content type="html"><![CDATA[<p>一道很经典的题,因为一块儿泥地可以被横着的木板覆盖也可以被竖着的木板覆盖,所以对于每个联通块我们横纵坐标分别标号,然后连接对应的横纵标号建图,求一遍最小覆盖即可。</p>
<a id="more"></a>
<p><a href="http://poj.org/problem?id=2226" target="_blank" rel="external">poj2226题目链接</a></p>
<p>贴出渣代码:</p>
<figure class="highlight cpp"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div><div class="line">49</div><div class="line">50</div><div class="line">51</div><div class="line">52</div><div class="line">53</div><div class="line">54</div><div class="line">55</div><div class="line">56</div><div class="line">57</div><div class="line">58</div><div class="line">59</div><div class="line">60</div><div class="line">61</div><div class="line">62</div><div class="line">63</div><div class="line">64</div><div class="line">65</div><div class="line">66</div><div class="line">67</div><div class="line">68</div><div class="line">69</div><div class="line">70</div><div class="line">71</div><div class="line">72</div><div class="line">73</div><div class="line">74</div><div class="line">75</div><div class="line">76</div><div class="line">77</div><div class="line">78</div><div class="line">79</div><div class="line">80</div><div class="line">81</div><div class="line">82</div><div class="line">83</div><div class="line">84</div><div class="line">85</div><div class="line">86</div></pre></td><td class="code"><pre><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><iostream></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstring></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstdio></span></span></div><div class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</div><div class="line"><span class="keyword">char</span> c[<span class="number">100</span>][<span class="number">100</span>];</div><div class="line"><span class="keyword">int</span> f[<span class="number">100</span>][<span class="number">100</span>];</div><div class="line"><span class="keyword">int</span> n,m;</div><div class="line"><span class="keyword">int</span> fa[<span class="number">1000</span>];</div><div class="line"><span class="keyword">bool</span> vis[<span class="number">1000</span>];</div><div class="line"><span class="keyword">int</span> tot;</div><div class="line"><span class="keyword">int</span> had[<span class="number">1000</span>],nxt[<span class="number">160004</span>],point[<span class="number">160004</span>];</div><div 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> x,<span class="keyword">int</span> y)</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> tot++;</div><div class="line"> point[tot]=y;</div><div class="line"> nxt[tot]=had[x];</div><div class="line"> had[x]=tot;</div><div class="line">}</div><div class="line"><span class="function"><span class="keyword">bool</span> <span class="title">cando</span><span class="params">(<span class="keyword">int</span> x)</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=had[x];i;i=nxt[i])</div><div class="line"> {</div><div class="line"> <span class="keyword">int</span> to=point[i];</div><div class="line"> <span class="keyword">if</span>(!vis[to])</div><div class="line"> {</div><div class="line"> vis[to]=<span class="number">1</span>;</div><div class="line"> <span class="keyword">if</span>(fa[to]==<span class="number">0</span>||cando(fa[to]))</div><div class="line"> {</div><div class="line"> fa[to]=x;</div><div class="line"> <span class="keyword">return</span> <span class="number">1</span>;</div><div class="line"> }</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line">}</div><div class="line"><span class="keyword">int</span> ns,ms;</div><div class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="built_in">scanf</span>(<span class="string">"%d%d"</span>,&n,&m);</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<=n;i++)</div><div class="line"> <span class="built_in">scanf</span>(<span class="string">"%s"</span>,c[i]+<span class="number">1</span>);</div><div class="line"> <span class="keyword">int</span> ans=<span class="number">0</span>;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<=n;i++)</div><div class="line"> {</div><div class="line"> <span class="keyword">int</span> t=<span class="number">0</span>;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> j=<span class="number">1</span>;j<=m;j++)</div><div class="line"> <span class="keyword">if</span>(t==<span class="number">0</span>&&c[i][j]==<span class="string">'*'</span>)</div><div class="line"> {</div><div class="line"> ns++;</div><div class="line"> f[i][j]=ns;</div><div class="line"> t=<span class="number">1</span>;</div><div class="line"> }</div><div class="line"> <span class="keyword">else</span></div><div class="line"> {</div><div class="line"> <span class="keyword">if</span>(t==<span class="number">1</span>&&c[i][j]==<span class="string">'*'</span>)</div><div class="line"> f[i][j]=ns;</div><div class="line"> <span class="keyword">if</span>(t==<span class="number">1</span>&&c[i][j]==<span class="string">'.'</span>)</div><div class="line"> t=<span class="number">0</span>;</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<=m;i++)</div><div class="line"> {</div><div class="line"> <span class="keyword">int</span> t=<span class="number">0</span>;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> j=<span class="number">1</span>;j<=n;j++)</div><div class="line"> <span class="keyword">if</span>(t==<span class="number">0</span>&&c[j][i]==<span class="string">'*'</span>)</div><div class="line"> {</div><div class="line"> ms++;</div><div class="line"> add(f[j][i],ms);</div><div class="line"> t=<span class="number">1</span>;</div><div class="line"> }</div><div class="line"> <span class="keyword">else</span></div><div class="line"> {</div><div class="line"> <span class="keyword">if</span>(t==<span class="number">1</span>&&c[j][i]==<span class="string">'*'</span>)</div><div class="line"> add(f[j][i],ms);</div><div class="line"> <span class="keyword">if</span>(t==<span class="number">1</span>&&c[j][i]==<span class="string">'.'</span>)</div><div class="line"> t=<span class="number">0</span>;</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<=ns;i++)</div><div class="line"> {</div><div class="line"> <span class="built_in">memset</span>(vis,<span class="number">0</span>,<span class="keyword">sizeof</span>(vis));</div><div class="line"> <span class="keyword">if</span>(cando(i))ans++;</div><div class="line"> }</div><div class="line"> <span class="built_in">printf</span>(<span class="string">"%d\n"</span>,ans);</div><div class="line"> <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line">}</div></pre></td></tr></table></figure>]]></content>
<categories>
<category> poj </category>
</categories>
<tags>
<tag> 二分图 </tag>
</tags>
</entry>
<entry>
<title><![CDATA[poj3678/poj3207]]></title>
<url>/poj/poj3678_poj3207/</url>
<content type="html"><![CDATA[<p>两道入门的2-sat,只要判定是否有解即可。</p>
<a id="more"></a>
<h3 id="poj3678"><a href="#poj3678" class="headerlink" title="poj3678"></a>poj3678</h3><hr>
<p> <a href="http://poj.org/problem?id=3278" target="_blank" rel="external">题目链接</a><br> 直接读入然后按照题目要求和位运算规则建图即可,不多解释。</p>
<figure class="highlight cpp"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div><div class="line">49</div><div class="line">50</div><div class="line">51</div><div class="line">52</div><div class="line">53</div><div class="line">54</div><div class="line">55</div><div class="line">56</div><div class="line">57</div><div class="line">58</div><div class="line">59</div><div class="line">60</div><div class="line">61</div><div class="line">62</div><div class="line">63</div><div class="line">64</div><div class="line">65</div><div class="line">66</div><div class="line">67</div><div class="line">68</div><div class="line">69</div><div class="line">70</div><div class="line">71</div><div class="line">72</div><div class="line">73</div><div class="line">74</div><div class="line">75</div><div class="line">76</div><div class="line">77</div><div class="line">78</div><div class="line">79</div><div class="line">80</div><div class="line">81</div><div class="line">82</div><div class="line">83</div><div class="line">84</div><div class="line">85</div><div class="line">86</div><div class="line">87</div><div class="line">88</div><div class="line">89</div><div class="line">90</div><div class="line">91</div><div class="line">92</div><div class="line">93</div><div class="line">94</div><div class="line">95</div><div class="line">96</div><div class="line">97</div><div class="line">98</div><div class="line">99</div><div class="line">100</div><div class="line">101</div><div class="line">102</div><div class="line">103</div><div class="line">104</div><div class="line">105</div><div class="line">106</div><div class="line">107</div><div class="line">108</div><div class="line">109</div><div class="line">110</div><div class="line">111</div><div class="line">112</div><div class="line">113</div><div class="line">114</div><div class="line">115</div><div class="line">116</div><div class="line">117</div><div class="line">118</div><div class="line">119</div><div class="line">120</div><div class="line">121</div><div class="line">122</div><div class="line">123</div></pre></td><td class="code"><pre><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><iostream></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstring></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstdio></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><stack></span></span></div><div class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</div><div class="line"><span class="keyword">int</span> dfn[<span class="number">100002</span>],low[<span class="number">100002</span>];</div><div class="line"><span class="keyword">int</span> tot,had[<span class="number">100002</span>],nxt[<span class="number">4000006</span>],point[<span class="number">4000006</span>];</div><div class="line"><span class="keyword">int</span> blng[<span class="number">100002</span>];</div><div class="line"><span class="keyword">int</span> t;</div><div 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> x,<span class="keyword">int</span> y)</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> tot++;</div><div class="line"> point[tot]=y;</div><div class="line"> nxt[tot]=had[x];</div><div class="line"> had[x]=tot;</div><div class="line">} </div><div class="line"><span class="keyword">bool</span> vis[<span class="number">1003</span>];</div><div class="line"><span class="built_in">stack</span><<span class="keyword">int</span>>s;</div><div 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></div><div class="line"><span class="function"></span>{</div><div class="line"> low[x]=dfn[x]=++t;</div><div class="line"> vis[x]=<span class="number">1</span>;</div><div class="line"> s.push(x);</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=had[x];i;i=nxt[i])</div><div class="line"> {</div><div class="line"> <span class="keyword">int</span> to=point[i];</div><div class="line"> <span class="keyword">if</span>(!dfn[to])</div><div class="line"> {</div><div class="line"> tarjan(to);</div><div class="line"> low[x]=min(low[x],low[to]);</div><div class="line"> }</div><div class="line"> <span class="keyword">else</span> <span class="keyword">if</span>(vis[to])</div><div class="line"> {</div><div class="line"> low[x]=min(low[x],dfn[to]);</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="keyword">if</span>(dfn[x]==low[x])</div><div class="line"> {</div><div class="line"> <span class="keyword">int</span> y;</div><div class="line"> <span class="keyword">while</span>(!s.empty())</div><div class="line"> {</div><div class="line"> y=s.top();</div><div class="line"> s.pop();</div><div class="line"> vis[y]=<span class="number">0</span>;</div><div class="line"> blng[y]=x;</div><div class="line"> <span class="keyword">if</span>(y==x)<span class="keyword">break</span>;</div><div class="line"> }</div><div class="line"> }</div><div class="line">}</div><div class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="keyword">int</span> n,m;</div><div class="line"> <span class="built_in">scanf</span>(<span class="string">"%d%d"</span>,&n,&m);</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<=m;i++)</div><div class="line"> {</div><div class="line"> <span class="keyword">int</span> a,b,c;</div><div class="line"> <span class="built_in">scanf</span>(<span class="string">"%d%d%d"</span>,&a,&b,&c);</div><div class="line"> a++;b++;</div><div class="line"> <span class="keyword">char</span> ch[<span class="number">10</span>];</div><div class="line"> <span class="built_in">scanf</span>(<span class="string">"%s"</span>,ch);</div><div class="line"> <span class="keyword">if</span>(!<span class="built_in">strcmp</span>(ch,<span class="string">"AND"</span>))</div><div class="line"> {</div><div class="line"> <span class="keyword">if</span>(c==<span class="number">0</span>)</div><div class="line"> {</div><div class="line"> add(a+n,b);</div><div class="line"> add(b+n,a);</div><div class="line"> }</div><div class="line"> <span class="keyword">else</span></div><div class="line"> {</div><div class="line"> add(a,a+n);</div><div class="line"> add(b,b+n);</div><div class="line"> add(a+n,b+n);</div><div class="line"> add(b+n,a+n);</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="keyword">if</span>(!<span class="built_in">strcmp</span>(ch,<span class="string">"OR"</span>))</div><div class="line"> {</div><div class="line"> <span class="keyword">if</span>(c==<span class="number">0</span>)</div><div class="line"> {</div><div class="line"> add(a,b);</div><div class="line"> add(b,a);</div><div class="line"> add(a+n,a);</div><div class="line"> add(b+n,b);</div><div class="line"> }</div><div class="line"> <span class="keyword">else</span></div><div class="line"> {</div><div class="line"> add(a,b+n);</div><div class="line"> add(b,a+n);</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="keyword">if</span>(!<span class="built_in">strcmp</span>(ch,<span class="string">"XOR"</span>))</div><div class="line"> {</div><div class="line"> <span class="keyword">if</span>(c==<span class="number">0</span>)</div><div class="line"> {</div><div class="line"> add(a,b);</div><div class="line"> add(b,a);</div><div class="line"> add(a+n,b+n);</div><div class="line"> add(b+n,a+n);</div><div class="line"> }</div><div class="line"> <span class="keyword">else</span></div><div class="line"> {</div><div class="line"> add(a,b+n);</div><div class="line"> add(b+n,a);</div><div class="line"> add(a+n,b);</div><div class="line"> add(b,a+n);</div><div class="line"> }</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<=<span class="number">2</span>*n;i++)</div><div class="line"> {</div><div class="line"> <span class="keyword">if</span>(!dfn[i])tarjan(i);</div><div class="line"> }</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<=n;i++)</div><div class="line"> {</div><div class="line"> <span class="keyword">if</span>(blng[i]==blng[i+n])</div><div class="line"> {</div><div class="line"> <span class="built_in">printf</span>(<span class="string">"NO"</span>);</div><div class="line"> <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="built_in">printf</span>(<span class="string">"YES"</span>);</div><div class="line"> <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line">}</div></pre></td></tr></table></figure>
<h3 id="poj3207"><a href="#poj3207" class="headerlink" title="poj3207"></a>poj3207</h3><hr>
<p><a href="http://poj.org/problem?id=3207" target="_blank" rel="external">题目链接</a></p>
<p>在围成一个圈的点之间连边,边不能与圈交叉,即要么全在里面要么全在外面。将所有的边读进来之后,将边的编号拆点,若两条边可能交叉就对应连边建图。之后判定即可。</p>
<figure class="highlight cpp"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div><div class="line">49</div><div class="line">50</div><div class="line">51</div><div class="line">52</div><div class="line">53</div><div class="line">54</div><div class="line">55</div><div class="line">56</div><div class="line">57</div><div class="line">58</div><div class="line">59</div><div class="line">60</div><div class="line">61</div><div class="line">62</div><div class="line">63</div><div class="line">64</div><div class="line">65</div><div class="line">66</div><div class="line">67</div><div class="line">68</div><div class="line">69</div><div class="line">70</div><div class="line">71</div><div class="line">72</div><div class="line">73</div><div class="line">74</div><div class="line">75</div><div class="line">76</div><div class="line">77</div><div class="line">78</div><div class="line">79</div><div class="line">80</div><div class="line">81</div><div class="line">82</div><div class="line">83</div><div class="line">84</div><div class="line">85</div><div class="line">86</div><div class="line">87</div><div class="line">88</div><div class="line">89</div><div class="line">90</div><div class="line">91</div><div class="line">92</div><div class="line">93</div></pre></td><td class="code"><pre><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><iostream></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstdio></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><stack></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstring></span></span></div><div class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</div><div class="line"><span class="keyword">const</span> <span class="keyword">int</span> big=<span class="number">1000002</span>;</div><div class="line"><span class="keyword">int</span> dfn[big],low[big];</div><div class="line"><span class="keyword">int</span> tot,n,m;</div><div class="line"><span class="keyword">int</span> t;</div><div class="line"><span class="keyword">int</span> had[big],nxt[big],point[big];</div><div class="line"><span class="keyword">bool</span> vis[big];</div><div class="line"><span class="keyword">int</span> blng[big];</div><div class="line"><span class="keyword">int</span> l[big];</div><div class="line"><span class="keyword">int</span> r[big];</div><div 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> x,<span class="keyword">int</span> y)</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> tot++;</div><div class="line"> point[tot]=y;</div><div class="line"> nxt[tot]=had[x];</div><div class="line"> had[x]=tot;</div><div class="line">}</div><div class="line"><span class="built_in">stack</span><<span class="keyword">int</span>> sk;</div><div 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></div><div class="line"><span class="function"></span>{</div><div class="line"> dfn[x]=low[x]=++t;</div><div class="line"> vis[x]=<span class="number">1</span>;</div><div class="line"> sk.push(x);</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=had[x];i;i=nxt[i])</div><div class="line"> {</div><div class="line"> <span class="keyword">int</span> to=point[i];</div><div class="line"> <span class="keyword">if</span>(!dfn[to])</div><div class="line"> {</div><div class="line"> tarjan(to);</div><div class="line"> low[x]=min(low[x],low[to]);</div><div class="line"> }</div><div class="line"> <span class="keyword">else</span> <span class="keyword">if</span>(vis[to])low[x]=min(low[x],dfn[to]);</div><div class="line"> }</div><div class="line"> <span class="keyword">if</span>(low[x]==dfn[x])</div><div class="line"> {</div><div class="line"> <span class="keyword">int</span> y;</div><div class="line"> <span class="keyword">while</span>(!sk.empty())</div><div class="line"> {</div><div class="line"> y=sk.top();</div><div class="line"> sk.pop();</div><div class="line"> vis[y]=<span class="number">0</span>;</div><div class="line"> blng[y]=x;</div><div class="line"> <span class="keyword">if</span>(y==x)<span class="keyword">break</span>;</div><div class="line"> }</div><div class="line"> }</div><div class="line">}</div><div class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="built_in">cin</span>>>n>>m;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<=m;i++)</div><div class="line"> {</div><div class="line"> <span class="keyword">int</span> a,b;</div><div class="line"> <span class="built_in">cin</span>>>a>>b;</div><div class="line"> r[i]=r[i+m]=max(a,b)+<span class="number">1</span>;</div><div class="line"> l[i]=l[i+m]=min(a,b)+<span class="number">1</span>; </div><div class="line"> }</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<m;i++)</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> j=<span class="number">1</span>+i;j<=m;j++)</div><div class="line"> {</div><div class="line"> <span class="keyword">if</span>(r[i]>=l[j]&&r[i]<=r[j]&&l[i]<=l[j])</div><div class="line"> {</div><div class="line"> add(i,j+m);</div><div class="line"> add(j,i+m);</div><div class="line"> add(j+m,i);</div><div class="line"> add(i+m,j);</div><div class="line"> }</div><div class="line"> <span class="keyword">if</span>(r[j]>=l[i]&&r[i]<=r[j]&&l[i]<=l[j])</div><div class="line"> {</div><div class="line"> add(i,j+m);</div><div class="line"> add(j,i+m);</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<=<span class="number">2</span>*m;i++)</div><div class="line"> {</div><div class="line"> <span class="keyword">if</span>(!dfn[i])tarjan(i);</div><div class="line"> }</div><div class="line"> <span class="keyword">bool</span> f=<span class="number">1</span>;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<=m;i++)</div><div class="line"> {</div><div class="line"> <span class="keyword">if</span>(blng[i]==blng[i+m])</div><div class="line"> {</div><div class="line"> f=<span class="number">0</span>;</div><div class="line"> <span class="keyword">break</span>;</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="keyword">if</span>(f)<span class="built_in">cout</span><<<span class="string">"panda is telling the truth..."</span>;</div><div class="line"> <span class="keyword">else</span> <span class="built_in">cout</span><<<span class="string">"the evil panda is lying again"</span>;</div><div class="line"> <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line">}</div></pre></td></tr></table></figure>]]></content>
<categories>
<category> poj </category>
</categories>
<tags>
<tag> 2-SAT </tag>
</tags>
</entry>
<entry>
<title><![CDATA[poj2749]]></title>
<url>/poj/poj2749/</url>
<content type="html"><![CDATA[<p>poj六道2-sat中的最后一道。事实上也算比较基础的,不用输出方案,只是建图的时候要多注意一些。</p>
<p><a href="http://poj.org/problem?id=2749" target="_blank" rel="external">题目链接</a></p>
<p>大意是给你两个源点,有n个点要向这两个点中的一个连边,边长为他们的曼哈顿距离,其中有的点必须连同一个源点,有的点必须连不同的源点。两个源点之间有边。给出两个源点和这n个点的坐标,要求使这n个点中任意两点之间的边长(点到源点再到点的边长)尽可能的小。</p>
<a id="more"></a>
<p>由于“最小化最长的连边”具有单调性,我们可以二分答案。每次二分时重新建图,将边长大于答案的边所连的两个点连(2-sat所成图中的)边。可行的话再向下二分,否则向上二分。</p>
<p>自己调了一个下午的代码老是不对,连样例都过不去。后来参考网上的题解还是不行,最后还是同机房的dalao帮忙找出了错,不止一个还一个比一个智障。。。。</p>
<p>放上渣代码(捂脸)<br><figure class="highlight cpp"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div><div class="line">49</div><div class="line">50</div><div class="line">51</div><div class="line">52</div><div class="line">53</div><div class="line">54</div><div class="line">55</div><div class="line">56</div><div class="line">57</div><div class="line">58</div><div class="line">59</div><div class="line">60</div><div class="line">61</div><div class="line">62</div><div class="line">63</div><div class="line">64</div><div class="line">65</div><div class="line">66</div><div class="line">67</div><div class="line">68</div><div class="line">69</div><div class="line">70</div><div class="line">71</div><div class="line">72</div><div class="line">73</div><div class="line">74</div><div class="line">75</div><div class="line">76</div><div class="line">77</div><div class="line">78</div><div class="line">79</div><div class="line">80</div><div class="line">81</div><div class="line">82</div><div class="line">83</div><div class="line">84</div><div class="line">85</div><div class="line">86</div><div class="line">87</div><div class="line">88</div><div class="line">89</div><div class="line">90</div><div class="line">91</div><div class="line">92</div><div class="line">93</div><div class="line">94</div><div class="line">95</div><div class="line">96</div><div class="line">97</div><div class="line">98</div><div class="line">99</div><div class="line">100</div><div class="line">101</div><div class="line">102</div><div class="line">103</div><div class="line">104</div><div class="line">105</div><div class="line">106</div><div class="line">107</div><div class="line">108</div><div class="line">109</div><div class="line">110</div><div class="line">111</div><div class="line">112</div><div class="line">113</div><div class="line">114</div><div class="line">115</div><div class="line">116</div><div class="line">117</div><div class="line">118</div><div class="line">119</div><div class="line">120</div><div class="line">121</div><div class="line">122</div><div class="line">123</div><div class="line">124</div><div class="line">125</div><div class="line">126</div><div class="line">127</div><div class="line">128</div><div class="line">129</div><div class="line">130</div><div class="line">131</div><div class="line">132</div><div class="line">133</div><div class="line">134</div><div class="line">135</div><div class="line">136</div><div class="line">137</div><div class="line">138</div><div class="line">139</div><div class="line">140</div><div class="line">141</div><div class="line">142</div><div class="line">143</div><div class="line">144</div><div class="line">145</div><div class="line">146</div><div class="line">147</div><div class="line">148</div><div class="line">149</div><div class="line">150</div><div class="line">151</div><div class="line">152</div><div class="line">153</div><div class="line">154</div><div class="line">155</div><div class="line">156</div><div class="line">157</div><div class="line">158</div><div class="line">159</div><div class="line">160</div><div class="line">161</div><div class="line">162</div><div class="line">163</div><div class="line">164</div><div class="line">165</div><div class="line">166</div><div class="line">167</div><div class="line">168</div><div class="line">169</div><div class="line">170</div><div class="line">171</div><div class="line">172</div><div class="line">173</div><div class="line">174</div><div class="line">175</div><div class="line">176</div></pre></td><td class="code"><pre><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><iostream></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstdio></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstring></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><stack></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><algorithm></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cmath></span></span></div><div class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</div><div class="line"><span class="keyword">int</span> had[<span class="number">1003</span>],nxt[<span class="number">500000</span>],point[<span class="number">500000</span>];</div><div class="line"><span class="keyword">int</span> tot;</div><div class="line"><span class="keyword">int</span> sdis;</div><div 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> x,<span class="keyword">int</span> y)</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> tot++;</div><div class="line"> point[tot]=y;</div><div class="line"> nxt[tot]=had[x];</div><div class="line"> had[x]=tot;</div><div class="line">}</div><div class="line"><span class="keyword">int</span> t,timel;</div><div class="line"><span class="keyword">int</span> dfn[<span class="number">1002</span>],low[<span class="number">1004</span>];</div><div class="line"><span class="built_in">stack</span><<span class="keyword">int</span>>ss;</div><div class="line"><span class="keyword">bool</span> vis[<span class="number">1003</span>];</div><div class="line"><span class="keyword">int</span> dis1[<span class="number">5090</span>],dis2[<span class="number">5090</span>];</div><div class="line"><span class="keyword">int</span> blng[<span class="number">1002</span>];</div><div class="line"><span class="keyword">int</span> hate[<span class="number">5009</span>][<span class="number">2</span>];</div><div class="line"><span class="keyword">int</span> like[<span class="number">5009</span>][<span class="number">2</span>];</div><div class="line"><span class="function"><span class="keyword">void</span> <span class="title">tarjan</span><span class="params">(<span class="keyword">int</span> u)</span> </span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="keyword">int</span> v,i;</div><div class="line"> dfn[u]=low[u]=++t;</div><div class="line"> vis[u]=<span class="number">1</span>;</div><div class="line"> ss.push(u);</div><div class="line"> <span class="keyword">for</span>(i=had[u];i;i=nxt[i]) </div><div class="line"> {</div><div class="line"> v=point[i];</div><div class="line"> <span class="keyword">if</span>(!dfn[v]) </div><div class="line"> {</div><div class="line"> tarjan(v);</div><div class="line"> low[u]=min(low[u],low[v]);</div><div class="line"> } </div><div class="line"> <span class="keyword">else</span> <span class="keyword">if</span>(vis[v]) </div><div class="line"> low[u]=min(low[u],dfn[v]);</div><div class="line"> }</div><div class="line"> <span class="keyword">if</span>(dfn[u] == low[u]) </div><div class="line"> {</div><div class="line"> timel++;</div><div class="line"> <span class="keyword">do</span> </div><div class="line"> {</div><div class="line"> v=ss.top();</div><div class="line"> ss.pop();</div><div class="line"> blng[v]=timel;</div><div class="line"> vis[v]=<span class="literal">false</span>;</div><div class="line"> } <span class="keyword">while</span>(v!=u);</div><div class="line"> }</div><div class="line">}</div><div class="line"><span class="keyword">int</span> n,lk,ht;</div><div class="line"><span class="keyword">int</span> big;</div><div class="line"><span class="function"><span class="keyword">void</span> <span class="title">build</span><span class="params">(<span class="keyword">int</span> lim)</span> </span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="keyword">int</span> i,j,x,y;</div><div class="line"> <span class="keyword">for</span>(i=<span class="number">0</span>;i<ht;i++) </div><div class="line"> {</div><div class="line"> x=hate[i][<span class="number">0</span>]*<span class="number">2</span>; </div><div class="line"> y=hate[i][<span class="number">1</span>]*<span class="number">2</span>;</div><div class="line"> add(x,y+<span class="number">1</span>); </div><div class="line"> add(y,x+<span class="number">1</span>);</div><div class="line"> add(y+<span class="number">1</span>,x); </div><div class="line"> add(x+<span class="number">1</span>,y);</div><div class="line"> }</div><div class="line"> <span class="keyword">for</span>(i=<span class="number">0</span>;i<lk;i++) </div><div class="line"> {</div><div class="line"> x=like[i][<span class="number">0</span>]*<span class="number">2</span>;</div><div class="line"> y=like[i][<span class="number">1</span>]*<span class="number">2</span>;</div><div class="line"> add(x,y); </div><div class="line"> add(x+<span class="number">1</span>,y+<span class="number">1</span>);</div><div class="line"> add(y,x); </div><div class="line"> add(y+<span class="number">1</span>,x+<span class="number">1</span>);</div><div class="line"> }</div><div class="line"> <span class="keyword">for</span>(i=<span class="number">0</span>;i<n;i++) </div><div class="line"> <span class="keyword">for</span>(j=i+<span class="number">1</span>;j<n;j++) </div><div class="line"> {</div><div class="line"> x=i<<<span class="number">1</span>;</div><div class="line"> y=j<<<span class="number">1</span>;</div><div class="line"> <span class="keyword">if</span>(dis1[i]+dis1[j]>lim) </div><div class="line"> {</div><div class="line"> add(x,y+<span class="number">1</span>);</div><div class="line"> add(y,x+<span class="number">1</span>);</div><div class="line"> }</div><div class="line"> <span class="keyword">if</span>(dis2[i]+dis2[j]>lim) </div><div class="line"> {</div><div class="line"> add(x+<span class="number">1</span>,y);</div><div class="line"> add(y+<span class="number">1</span>,x);</div><div class="line"> }</div><div class="line"> <span class="keyword">if</span>(dis1[i]+dis2[j]+sdis>lim) </div><div class="line"> {</div><div class="line"> add(x,y);</div><div class="line"> add(y+<span class="number">1</span>,x+<span class="number">1</span>);</div><div class="line"> }</div><div class="line"> <span class="keyword">if</span>(dis2[i]+dis1[j]+sdis>lim) </div><div class="line"> { </div><div class="line"> add(x+<span class="number">1</span>,y+<span class="number">1</span>);</div><div class="line"> add(y,x);</div><div class="line"> }</div><div class="line"> }</div><div class="line">}</div><div class="line"><span class="function"><span class="keyword">bool</span> <span class="title">cando</span><span class="params">()</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<<span class="number">2</span>*n;i+=<span class="number">2</span>)</div><div class="line"> <span class="keyword">if</span>(blng[i]==blng[i+<span class="number">1</span>])</div><div class="line"> <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line"> <span class="keyword">return</span> <span class="number">1</span>;</div><div class="line">}</div><div class="line"><span class="function"><span class="keyword">bool</span> <span class="title">solve</span><span class="params">(<span class="keyword">int</span> lim)</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="built_in">memset</span>(blng,<span class="number">0</span>,<span class="keyword">sizeof</span>(blng));</div><div class="line"> <span class="built_in">memset</span>(dfn,<span class="number">0</span>,<span class="keyword">sizeof</span>(dfn));</div><div class="line"> <span class="built_in">memset</span>(low,<span class="number">0</span>,<span class="keyword">sizeof</span>(low));</div><div class="line"> tot=<span class="number">0</span>;</div><div class="line"> timel=<span class="number">0</span>;</div><div class="line"> t=<span class="number">0</span>;</div><div class="line"> <span class="built_in">memset</span>(had,<span class="number">0</span>,<span class="keyword">sizeof</span>(had));</div><div class="line"> <span class="built_in">memset</span>(point,<span class="number">0</span>,<span class="keyword">sizeof</span>(point));</div><div class="line"> <span class="built_in">memset</span>(nxt,<span class="number">0</span>,<span class="keyword">sizeof</span>(nxt));</div><div class="line"> build(lim);</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<<span class="number">2</span>*n;i++)</div><div class="line"> <span class="keyword">if</span>(!dfn[i])tarjan(i);</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<<span class="number">2</span>*n;i+=<span class="number">2</span>)</div><div class="line"> <span class="keyword">if</span>(blng[i]==blng[i+<span class="number">1</span>])</div><div class="line"> <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line"> <span class="keyword">return</span> <span class="number">1</span>;</div><div class="line">}</div><div class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="built_in">cin</span>>>n>>ht>>lk;</div><div class="line"> <span class="keyword">int</span> x1,x2,y1,y2;</div><div class="line"> <span class="built_in">cin</span>>>x1>>y1>>x2>>y2;</div><div class="line"> sdis=<span class="built_in">abs</span>(x1-x2)+<span class="built_in">abs</span>(y1-y2);</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<n;i++) </div><div class="line"> {</div><div class="line"> <span class="keyword">int</span> x,y;</div><div class="line"> <span class="built_in">scanf</span>(<span class="string">"%d%d"</span>,&x,&y);</div><div class="line"> dis1[i]=<span class="built_in">abs</span>(x-x1)+<span class="built_in">abs</span>(y-y1);</div><div class="line"> dis2[i]=<span class="built_in">abs</span>(x-x2)+<span class="built_in">abs</span>(y-y2);</div><div class="line"> big=max(big,max(dis1[i],dis2[i]));</div><div class="line"> }</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<ht;i++)</div><div class="line"> {</div><div class="line"> <span class="keyword">int</span> a,b;</div><div class="line"> <span class="built_in">cin</span>>>a>>b;</div><div class="line"> a--;</div><div class="line"> b--;</div><div class="line"> hate[i][<span class="number">0</span>]=a;</div><div class="line"> hate[i][<span class="number">1</span>]=b;</div><div class="line"> }</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<lk;i++)</div><div class="line"> {</div><div class="line"> <span class="keyword">int</span> a,b;</div><div class="line"> <span class="built_in">cin</span>>>a>>b;</div><div class="line"> a--;</div><div class="line"> b--;</div><div class="line"> like[i][<span class="number">0</span>]=a;</div><div class="line"> like[i][<span class="number">1</span>]=b;</div><div class="line"> }</div><div class="line"> <span class="keyword">int</span> l=<span class="number">0</span>, r=big*<span class="number">3</span>,mid,ans=<span class="number">-1</span>;</div><div class="line"> <span class="keyword">while</span>(l<=r) </div><div class="line"> {</div><div class="line"> mid=(l+r)>><span class="number">1</span>;</div><div class="line"> <span class="keyword">if</span>(solve(mid)) </div><div class="line"> {</div><div class="line"> ans=mid;</div><div class="line"> r=mid<span class="number">-1</span>;</div><div class="line"> }</div><div class="line"> <span class="keyword">else</span> l=mid+<span class="number">1</span>;</div><div class="line"> }</div><div class="line"> <span class="built_in">cout</span><<ans;</div><div class="line"> <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line">}</div></pre></td></tr></table></figure></p>
]]></content>
<categories>
<category> poj </category>
</categories>
<tags>
<tag> 2-SAT </tag>
</tags>
</entry>
<entry>
<title><![CDATA[poj2723]]></title>
<url>/poj/poj2723/</url>
<content type="html"><![CDATA[<p>一道很基础的2-sat,题目链接戳<a href="http://poj.org/problem?id=2723" target="_blank" rel="external">这里</a>。</p>
<p>大意是,你有n对钥匙,每对钥匙中只能选一个。你要开m个门,每个门可以用两把给定钥匙中的任意一把打开,问你最多能开到第几道门。</p>
<a id="more"></a>
<p>为了方便处理,我们先做个映射,把第i对钥匙的编号转换为<br><code>i*2</code>和<code>i*2+1</code>。然后将门当做限制连边,每读入一个就连一条边,判定是否可行,直到不可行为止。<br><figure class="highlight cpp"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div><div class="line">49</div><div class="line">50</div><div class="line">51</div><div class="line">52</div><div class="line">53</div><div class="line">54</div><div class="line">55</div><div class="line">56</div><div class="line">57</div><div class="line">58</div><div class="line">59</div><div class="line">60</div><div class="line">61</div><div class="line">62</div><div class="line">63</div><div class="line">64</div><div class="line">65</div><div class="line">66</div><div class="line">67</div><div class="line">68</div><div class="line">69</div><div class="line">70</div><div class="line">71</div><div class="line">72</div><div class="line">73</div><div class="line">74</div><div class="line">75</div><div class="line">76</div><div class="line">77</div><div class="line">78</div><div class="line">79</div><div class="line">80</div><div class="line">81</div><div class="line">82</div><div class="line">83</div><div class="line">84</div><div class="line">85</div><div class="line">86</div><div class="line">87</div><div class="line">88</div><div class="line">89</div><div class="line">90</div><div class="line">91</div></pre></td><td class="code"><pre><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><iostream></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstring></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><stack></span></span></div><div class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</div><div class="line"><span class="keyword">int</span> mp[<span class="number">10000</span>]; </div><div class="line"><span class="keyword">int</span> tot;</div><div class="line"><span class="keyword">int</span> had[<span class="number">5050</span>],nxt[<span class="number">5000</span>],point[<span class="number">5005</span>];</div><div class="line"><span class="keyword">int</span> t;</div><div class="line"><span class="keyword">int</span> dfn[<span class="number">20000</span>],low[<span class="number">20000</span>];</div><div class="line"><span class="keyword">int</span> blng[<span class="number">20000</span>];</div><div 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> x,<span class="keyword">int</span> y)</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> tot++;</div><div class="line"> point[tot]=y;</div><div class="line"> nxt[tot]=had[x];</div><div class="line"> had[x]=tot;</div><div class="line">}</div><div class="line"><span class="built_in">stack</span><<span class="keyword">int</span>> ss;</div><div class="line"><span class="keyword">bool</span> vis[<span class="number">20000</span>];</div><div 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></div><div class="line"><span class="function"></span>{</div><div class="line"> t++;</div><div class="line"> dfn[x]=low[x]=t;</div><div class="line"> vis[x]=<span class="number">1</span>;</div><div class="line"> ss.push(x);</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=had[x];i!=<span class="number">-1</span>;i=nxt[i])</div><div class="line"> {</div><div class="line"> <span class="keyword">int</span> to=point[i];</div><div class="line"> <span class="keyword">if</span>(!dfn[to])</div><div class="line"> {</div><div class="line"> tarjan(to);</div><div class="line"> low[x]=min(low[x],low[to]);</div><div class="line"> }</div><div class="line"> <span class="keyword">else</span> <span class="keyword">if</span>(vis[to])low[x]=min(low[x],dfn[to]);</div><div class="line"> }</div><div class="line"> <span class="keyword">if</span>(low[x]==dfn[x])</div><div class="line"> {</div><div class="line"> <span class="keyword">int</span> y=ss.top();</div><div class="line"> <span class="keyword">while</span>(!ss.empty())</div><div class="line"> {</div><div class="line"> y=ss.top();</div><div class="line"> ss.pop();</div><div class="line"> blng[y]=x;</div><div class="line"> vis[y]=<span class="number">0</span>;</div><div class="line"> <span class="keyword">if</span>(y==x)<span class="keyword">break</span>;</div><div class="line"> }</div><div class="line"> }</div><div class="line">}</div><div class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="keyword">int</span> n,m;</div><div class="line"> <span class="keyword">while</span>(<span class="built_in">cin</span>>>n>>m&&n)</div><div class="line"> {</div><div class="line"> tot=<span class="number">0</span>;</div><div class="line"> <span class="built_in">memset</span>(had,<span class="number">-1</span>,<span class="keyword">sizeof</span>(had));</div><div class="line"> <span class="built_in">memset</span>(nxt,<span class="number">-1</span>,<span class="keyword">sizeof</span>(nxt));</div><div class="line"> <span class="built_in">memset</span>(point,<span class="number">-1</span>,<span class="keyword">sizeof</span>(point));</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<n;i++)</div><div class="line"> {</div><div class="line"> <span class="keyword">int</span> a,b;</div><div class="line"> <span class="built_in">cin</span>>>a>>b;</div><div class="line"> mp[a]=<span class="number">2</span>*i;</div><div class="line"> mp[b]=<span class="number">2</span>*i+<span class="number">1</span>; </div><div class="line"> }</div><div class="line"> <span class="keyword">bool</span> f=<span class="number">0</span>;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<=m;i++)</div><div class="line"> {</div><div class="line"> <span class="keyword">int</span> a,b;</div><div class="line"> <span class="built_in">cin</span>>>a>>b;</div><div class="line"> <span class="keyword">if</span>(f)<span class="keyword">continue</span>;</div><div class="line"> add(mp[a],mp[b]^<span class="number">1</span>);</div><div class="line"> add(mp[b],mp[a]^<span class="number">1</span>);</div><div class="line"> t=<span class="number">0</span>;</div><div class="line"> <span class="built_in">memset</span>(dfn,<span class="number">0</span>,<span class="keyword">sizeof</span>(dfn));</div><div class="line"> <span class="built_in">memset</span>(low,<span class="number">0</span>,<span class="keyword">sizeof</span>(low));</div><div class="line"> <span class="built_in">memset</span>(vis,<span class="number">0</span>,<span class="keyword">sizeof</span>(vis));</div><div class="line"> <span class="built_in">memset</span>(blng,<span class="number">0</span>,<span class="keyword">sizeof</span>(blng));</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> j=<span class="number">0</span>;j<<span class="number">2</span>*n;j++)</div><div class="line"> <span class="keyword">if</span>(!dfn[j])tarjan(j);</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> j=<span class="number">0</span>;j<<span class="number">2</span>*n;j+=<span class="number">2</span>)</div><div class="line"> <span class="keyword">if</span>(blng[j]==blng[j+<span class="number">1</span>])</div><div class="line"> {</div><div class="line"> <span class="built_in">cout</span><<i<span class="number">-1</span><<<span class="built_in">endl</span>;</div><div class="line"> f=<span class="number">1</span>;</div><div class="line"> <span class="keyword">break</span>;</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="keyword">if</span>(f==<span class="number">0</span>)<span class="built_in">cout</span><<m<<<span class="built_in">endl</span>;</div><div class="line"> }</div><div class="line"> <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line">}</div></pre></td></tr></table></figure></p>
]]></content>
<categories>
<category> poj </category>
</categories>
<tags>
<tag> 2-SAT </tag>
</tags>
</entry>
<entry>
<title><![CDATA[bzoj1013]]></title>
<url>/bzoj/bzoj1013/</url>
<content type="html"><![CDATA[<p>本来是打算这两天一口气刷完poj的6到2-sat的,但昨天的模拟赛被一道题高斯消元直接虐了3个半小时没调出来,后来发现自己的高斯消元的板子就是错的= =。。</p>
<a id="more"></a>
<p>今天决定更新一下板子,就参照着<a href="http://hzwer.com/1981.html" target="_blank" rel="external">黄学长的博客</a>打了一下这道题WA了几遍总算AC了,没什么大问题。</p>
<p>照例丢<a href="http://www.lydsy.com/JudgeOnline/problem.php?id=1013" target="_blank" rel="external">链接</a>.</p>
<p>这道题题目大意是说给你一个n维空间球上的n+1个点,让你求球心坐标。只要处理一下输入就变成了一道高斯消元的模板题。<br><figure class="highlight cpp"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div><div class="line">49</div></pre></td><td class="code"><pre><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><iostream></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstdio></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cmath></span></span></div><div class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</div><div class="line"><span class="keyword">double</span> gs[<span class="number">20</span>][<span class="number">20</span>];</div><div class="line"><span class="keyword">double</span> f[<span class="number">20</span>];</div><div class="line"><span class="keyword">int</span> n;</div><div class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="built_in">cin</span>>>n;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<=n;i++)</div><div class="line"> <span class="built_in">cin</span>>>f[i];</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<=n;i++)</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> j=<span class="number">1</span>;j<=n;j++)</div><div class="line"> {</div><div class="line"> <span class="keyword">double</span> a;</div><div class="line"> <span class="built_in">cin</span>>>a;</div><div class="line"> gs[i][j]=<span class="number">2</span>*a<span class="number">-2</span>*f[j];</div><div class="line"> gs[i][n+<span class="number">1</span>]+=a*a;</div><div class="line"> gs[i][n+<span class="number">1</span>]-=f[j]*f[j];</div><div class="line"> }</div><div class="line"> <span class="comment">//对于读入的处理:</span></div><div class="line"> <span class="comment">//我们通过n个坐标列距离公式,拆开再合并可以列出n个多项式</span></div><div class="line"> <span class="comment">//再通过剩下的那个坐标构建等式,移项消元构建方程。 </span></div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<=n;i++)</div><div class="line"> {</div><div class="line"> <span class="keyword">int</span> big=<span class="number">0</span>,mn;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> j=<span class="number">1</span>;j<=n;j++)</div><div class="line"> <span class="keyword">if</span>(<span class="built_in">fabs</span>(gs[i][j])>big&&gs[i][j]!=<span class="number">0</span>)</div><div class="line"> {</div><div class="line"> big=gs[i][j];</div><div class="line"> mn=j;</div><div class="line"> }</div><div class="line"> <span class="keyword">if</span>(mn!=i)</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> j=<span class="number">1</span>;j<=n+<span class="number">1</span>;j++)</div><div class="line"> swap(gs[i][j],gs[mn][j]);</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> j=<span class="number">1</span>;j<=n;j++)</div><div class="line"> {</div><div class="line"> <span class="keyword">if</span>(j==i)<span class="keyword">continue</span>;</div><div class="line"> <span class="keyword">double</span> a=gs[j][i]/gs[i][i];</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> k=<span class="number">1</span>;k<=n+<span class="number">1</span>;k++)</div><div class="line"> gs[j][k]-=gs[i][k]*a;</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<n;i++)</div><div class="line"> <span class="built_in">printf</span>(<span class="string">"%.3lf "</span>,gs[i][n+<span class="number">1</span>]/gs[i][i]);</div><div class="line"> <span class="built_in">printf</span>(<span class="string">"%.3lf"</span>,gs[n][n+<span class="number">1</span>]/gs[n][n]);</div><div class="line"> <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line">}</div></pre></td></tr></table></figure></p>
]]></content>
<categories>
<category> bzoj </category>
</categories>
<tags>
<tag> 高斯消元 </tag>
</tags>
</entry>
<entry>
<title><![CDATA[poj3648]]></title>
<url>/poj/poj3648/</url>
<content type="html"><![CDATA[<p>一天之内完成两道2-sat,新方法就是霸气~</p>
<a id="more"></a>
<p>这道题的题目大意是一对新人要举行婚礼,邀请了n对夫妇在宴席上有这么些奇奇怪怪的风俗:一对夫妇不能做同一侧否则会有厄运;除此之外还有一些有暧昧关系的人,这些人不能同时被新娘看到,否则也会有厄运。问是否有解,若有的话输出任意一组。</p>
<p>这是<a href="http://poj.org/problem?id=3648" target="_blank" rel="external">题目链接</a>。</p>
<p>以坐在新郎一侧的人是谁为对应点建图,记录新郎一侧的解,输出的时候反过来。不直接记录新娘一侧的点是因为据discuss说新娘也可能有暧昧关系。。。。。。然后还有一点就是要连一条新娘到新郎的边,表示新郎一定要选(因为是求新郎一侧的解)。<br><figure class="highlight cpp"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div><div class="line">49</div><div class="line">50</div><div class="line">51</div><div class="line">52</div><div class="line">53</div><div class="line">54</div><div class="line">55</div><div class="line">56</div><div class="line">57</div><div class="line">58</div><div class="line">59</div><div class="line">60</div><div class="line">61</div><div class="line">62</div><div class="line">63</div><div class="line">64</div><div class="line">65</div><div class="line">66</div><div class="line">67</div><div class="line">68</div><div class="line">69</div><div class="line">70</div><div class="line">71</div><div class="line">72</div><div class="line">73</div><div class="line">74</div><div class="line">75</div><div class="line">76</div><div class="line">77</div><div class="line">78</div><div class="line">79</div><div class="line">80</div><div class="line">81</div><div class="line">82</div><div class="line">83</div><div class="line">84</div><div class="line">85</div><div class="line">86</div><div class="line">87</div><div class="line">88</div><div class="line">89</div><div class="line">90</div><div class="line">91</div><div class="line">92</div><div class="line">93</div><div class="line">94</div><div class="line">95</div><div class="line">96</div></pre></td><td class="code"><pre><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><iostream></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><stack> </span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstdio></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstring></span></span></div><div class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</div><div class="line"><span class="keyword">int</span> tot;</div><div class="line"><span class="keyword">int</span> had[<span class="number">200</span>],nxt[<span class="number">40004</span>],point[<span class="number">40004</span>];</div><div 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> x,<span class="keyword">int</span> y)</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> tot++;</div><div class="line"> point[tot]=y;</div><div class="line"> nxt[tot]=had[x];</div><div class="line"> had[x]=tot;</div><div class="line">}</div><div class="line"><span class="keyword">int</span> t,timel;</div><div class="line"><span class="keyword">int</span> dfn[<span class="number">200</span>],low[<span class="number">200</span>],blng[<span class="number">200</span>];</div><div class="line"><span class="keyword">bool</span> vis[<span class="number">200</span>];</div><div class="line"><span class="built_in">stack</span><<span class="keyword">int</span>>ss;</div><div 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></div><div class="line"><span class="function"></span>{</div><div class="line"> dfn[x]=low[x]=t++;</div><div class="line"> ss.push(x);</div><div class="line"> vis[x]=<span class="number">1</span>;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=had[x];i;i=nxt[i])</div><div class="line"> {</div><div class="line"> <span class="keyword">int</span> to=point[i];</div><div class="line"> <span class="keyword">if</span>(!dfn[to])</div><div class="line"> {</div><div class="line"> tarjan(to);</div><div class="line"> low[x]=min(low[x],low[to]);</div><div class="line"> }</div><div class="line"> <span class="keyword">else</span></div><div class="line"> <span class="keyword">if</span>(vis[to])low[x]=min(low[x],dfn[to]);</div><div class="line"> }</div><div class="line"> <span class="keyword">if</span>(dfn[x]==low[x])</div><div class="line"> {</div><div class="line"> timel++;</div><div class="line"> <span class="keyword">while</span>(!ss.empty())</div><div class="line"> {</div><div class="line"> <span class="keyword">int</span> y=ss.top();</div><div class="line"> blng[y]=timel;</div><div class="line"> vis[y]=<span class="number">0</span>;</div><div class="line"> ss.pop();</div><div class="line"> <span class="keyword">if</span>(y==x)<span class="keyword">break</span>;</div><div class="line"> }</div><div class="line"> }</div><div class="line">}</div><div class="line"><span class="keyword">int</span> n,m;</div><div class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="keyword">while</span>(<span class="built_in">cin</span>>>n>>m&&n)</div><div class="line"> { </div><div class="line"> tot=<span class="number">0</span>;</div><div class="line"> t=<span class="number">0</span>;</div><div class="line"> timel=<span class="number">0</span>;</div><div class="line"> <span class="keyword">bool</span> f=<span class="number">0</span>;</div><div class="line"> <span class="built_in">memset</span>(dfn,<span class="number">0</span>,<span class="keyword">sizeof</span>(dfn));</div><div class="line"> <span class="built_in">memset</span>(low,<span class="number">0</span>,<span class="keyword">sizeof</span>(low));</div><div class="line"> <span class="built_in">memset</span>(had,<span class="number">0</span>,<span class="keyword">sizeof</span>(had));</div><div class="line"> <span class="built_in">memset</span>(nxt,<span class="number">0</span>,<span class="keyword">sizeof</span>(nxt));</div><div class="line"> <span class="built_in">memset</span>(blng,<span class="number">0</span>,<span class="keyword">sizeof</span>(blng)); </div><div class="line"> <span class="built_in">memset</span>(point,<span class="number">0</span>,<span class="keyword">sizeof</span>(point));</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<m;i++)</div><div class="line"> {</div><div class="line"> <span class="keyword">int</span> w,h;</div><div class="line"> <span class="keyword">char</span> w1,h1;</div><div class="line"> <span class="built_in">cin</span>>>w>>w1;</div><div class="line"> <span class="built_in">cin</span>>>h>>h1;</div><div class="line"> w<<=<span class="number">1</span>;</div><div class="line"> h<<=<span class="number">1</span>;</div><div class="line"> <span class="keyword">if</span>(w1==<span class="string">'h'</span>)w++;</div><div class="line"> <span class="keyword">if</span>(h1==<span class="string">'h'</span>)h++;</div><div class="line"> add(w,h^<span class="number">1</span>);</div><div class="line"> add(h,w^<span class="number">1</span>);</div><div class="line"> }</div><div class="line"> add(<span class="number">0</span>,<span class="number">1</span>); </div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<<span class="number">2</span>*n;i++)</div><div class="line"> <span class="keyword">if</span>(!dfn[i])tarjan(i);</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<<span class="number">2</span>*n;i+=<span class="number">2</span>)</div><div class="line"> <span class="keyword">if</span>(blng[i]==blng[i+<span class="number">1</span>])</div><div class="line"> {</div><div class="line"> f=<span class="number">1</span>;</div><div class="line"> <span class="built_in">cout</span><<<span class="string">"bad luck\n"</span>;</div><div class="line"> <span class="keyword">break</span>;</div><div class="line"> }</div><div class="line"> <span class="keyword">if</span>(f)<span class="keyword">continue</span>;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">2</span>;i<<span class="number">2</span>*n;i+=<span class="number">2</span>)</div><div class="line"> {</div><div class="line"> <span class="built_in">cout</span><<(i>><span class="number">1</span>);</div><div class="line"> <span class="keyword">if</span>(blng[i]<blng[i+<span class="number">1</span>])<span class="built_in">cout</span><<<span class="string">"h "</span>;</div><div class="line"> <span class="keyword">else</span> <span class="built_in">cout</span><<<span class="string">"w "</span>;</div><div class="line"> }</div><div class="line"> <span class="built_in">cout</span><<<span class="built_in">endl</span>;</div><div class="line"> }</div><div class="line"> <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line">}</div></pre></td></tr></table></figure></p>
]]></content>
<categories>
<category> poj </category>
</categories>
<tags>
<tag> 2-SAT </tag>
</tags>
</entry>
<entry>
<title><![CDATA[一个有点意思的证明]]></title>
<url>/oi-nweb/afanruv/</url>
<content type="html"><![CDATA[<p>昨天二师兄突然来这边机房,然后又突然就没头没脑的提出了这个问题:</p>
<blockquote>
<p>将一个完全图的所有边任意指定方向(所谓竞赛图),如何证明这张图一定存在一条哈密顿路径?</p>
</blockquote>
<a id="more"></a>
<p>经过一番思考和操作,我们大致把它给搞出来了,现记录如下。</p>
<p>首先证明,一个竞赛图最多存在一个入度为0的点:<br>若存在两个以上的点入度为零,那么它们之间的边无法指明方向,证毕。</p>
<p>然后我们要明确一点,即一个完全图删掉一个点及其所有连边之后还是一个完全图。那么我们一直删掉那个入度为零的点进行拓扑排序,递归证明可得每次删掉一个点之后最多还是只会有一个点入度为零,且这个点一定是上一个被删点的儿子节点(姑且这么叫)。一直删点直到没有点为止,我们一定能够求出一条哈密顿路。</p>
<p>那么如果途中不存在入度为零的点怎么办呢?</p>
<p>我们可以随意指定一个点,并且把指向它的边都删掉,这样就有了一个入度为零的点了(手动滑稽)。由于我们删掉的都是它的入边,因此不会把其他的点变为入度为零的点。<br>然后继续递归求解。证毕。</p>
]]></content>
<categories>
<category> 线下OI </category>
</categories>
<tags>
<tag> 竞赛图 </tag>
<tag> 证明 </tag>
</tags>
</entry>
<entry>
<title><![CDATA[又是一道坑题HDU4405]]></title>
<url>/hdu/HDU4405/</url>
<content type="html"><![CDATA[<p>最近打算刷几道概率DP,然而就这么状况频出。。。</p>
<p>丢个链接:</p>
<p><a href="http://acm.hdu.edu.cn/showproblem.php?pid=4405" target="_blank" rel="external">HDU4405</a></p>
<p>这道题的大意是说Hzz玩儿飞行棋,起点是0,终点是n,并且路径上还有m条航线(x,y)可以不用掷骰子直接从x到y。问掷骰子次数的期望。</p>
<a id="more"></a>
<p>明明是一道裸题,结果又WA了好几遍。看讨论才发现若x点存在航线的话直接飞,不考虑掷骰子的事儿。然而原文中说的是</p>
<blockquote>
<p>The i-th flight line can help Hzz fly from grid Xi to Yi (0<Xi<Yi<=N) without throwing the dice.</p>
</blockquote>
<p>我也不知道这个“help”咋就成强制的了,因为可能会存在这种情况:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div></pre></td><td class="code"><pre><div class="line">12 7</div><div class="line">1 8</div><div class="line">2 12</div><div class="line">3 12</div><div class="line">4 12</div><div class="line">5 12</div><div class="line">6 12</div><div class="line">7 12</div><div class="line">0 0</div></pre></td></tr></table></figure></p>
<p>这样的数据,当第一次掷出1时很明显不选走航线是更优的。。。不是很明白飞行棋的规矩,但是按照题目里的说明应该是可以选择飞不飞吧。。。然而这么打就错了,强制飞就对了。。。辣鸡HDU。。。</p>
<figure class="highlight cpp"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div></pre></td><td class="code"><pre><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><iostream></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstdio></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstring></span></span></div><div class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</div><div class="line"><span class="keyword">int</span> n,m;</div><div class="line"><span class="keyword">double</span> f[<span class="number">100005</span>];</div><div class="line"><span class="keyword">int</span> to[<span class="number">100005</span>];</div><div class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="keyword">while</span>(<span class="built_in">scanf</span>(<span class="string">"%d%d"</span>,&n,&m)!=EOF&&n)</div><div class="line"> {</div><div class="line"> <span class="built_in">memset</span>(f,<span class="number">0</span>,<span class="keyword">sizeof</span>(f));</div><div class="line"> <span class="built_in">memset</span>(to,<span class="number">0</span>,<span class="keyword">sizeof</span>(to));</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<=m;i++)</div><div class="line"> {</div><div class="line"> <span class="keyword">int</span> a,b;</div><div class="line"> <span class="built_in">scanf</span>(<span class="string">"%d%d"</span>,&a,&b);</div><div class="line"> to[a]=b;</div><div class="line"> }</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=n<span class="number">-1</span>;i>=<span class="number">0</span>;i--)</div><div class="line"> {</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> j=<span class="number">1</span>;j<=<span class="number">6</span>;j++)</div><div class="line"> {</div><div class="line"> f[i]+=f[i+j];</div><div class="line"> <span class="keyword">if</span>(i+j==n)<span class="keyword">break</span>; </div><div class="line"> }</div><div class="line"> f[i]=f[i]/<span class="number">6.0</span>+<span class="number">1</span>;</div><div class="line"> <span class="keyword">if</span>(to[i])f[i]=min(f[i],f[to[i]]);</div><div class="line"> }</div><div class="line"> <span class="built_in">printf</span>(<span class="string">"%.4lf\n"</span>,f[<span class="number">0</span>]);</div><div class="line"> }</div><div class="line"> <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line">}</div></pre></td></tr></table></figure>
]]></content>
<categories>
<category> hdu </category>
</categories>
<tags>
<tag> DP </tag>
<tag> 期望 </tag>
</tags>
</entry>
<entry>
<title><![CDATA[HDU3853 LOOPS]]></title>
<url>/hdu/LOOPS/</url>
<content type="html"><![CDATA[<p>先丢个<a href="http://acm.hdu.edu.cn/showproblem.php?pid=3853" target="_blank" rel="external">题目链接</a>。<br>题目大意是此主人公(马猴烧酒,话说前几天才和yzyun大佬谈论过这个梗= =)处在一个r*c的矩阵的左上角 <a id="more"></a> ,她需要去到右下角,在每个点上,她有grid(r,c)的概率留在原地,有grid(r,c+1)的概率向右走,有grid(r+1,c)的1概率向下走,每次走动都需要花费2点能量值。求到终点的期望能量值花费。</p>
<p>一道很裸的期望DP,倒推期望,设f[i][j]为从点(i,j)到终点的期望,可推得,当s[i][j]不为1时,<code>f[i][j]=(f[i+1][j]*d[i][j]+f[i][j+1]*rm[i][j]+2)/(1-s[i][j])</code>,否则f[i][j]直接为0。一些变量的意义请直接见代码。</p>
<figure class="highlight cpp"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div></pre></td><td class="code"><pre><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><iostream></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstdio></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cstring></span></span></div><div class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</div><div class="line"><span class="keyword">double</span> d[<span class="number">1003</span>][<span class="number">1003</span>],rm[<span class="number">1003</span>][<span class="number">1003</span>];<span class="comment">//d代表向下的概率,rm代表向右的概率</span></div><div class="line"><span class="keyword">double</span> s[<span class="number">1003</span>][<span class="number">1003</span>],f[<span class="number">1003</span>][<span class="number">1003</span>];<span class="comment">//s代表留在原地的概率,f代表期望花费</span></div><div class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="keyword">int</span> r,c;</div><div class="line"> <span class="keyword">while</span>(<span class="built_in">scanf</span>(<span class="string">"%d%d"</span>,&r,&c)!=EOF)</div><div class="line"> {</div><div class="line"> <span class="built_in">memset</span>(f,<span class="number">0</span>,<span class="keyword">sizeof</span>(f));</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<=r;i++)</div><div class="line"> {</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> j=<span class="number">1</span>;j<=c;j++)</div><div class="line"> {</div><div class="line"> <span class="built_in">scanf</span>(<span class="string">"%lf%lf%lf"</span>,&s[i][j],&rm[i][j],&d[i][j]);</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=r;i>=<span class="number">1</span>;i--)</div><div class="line"> {</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> j=c;j>=<span class="number">1</span>;j--)</div><div class="line"> {</div><div class="line"> <span class="keyword">if</span>(i==r&&j==c)<span class="keyword">continue</span>;</div><div class="line"> <span class="keyword">if</span>(s[i][j]==<span class="number">1</span>)<span class="keyword">continue</span>;</div><div class="line"> f[i][j]=(f[i+<span class="number">1</span>][j]*d[i][j]+f[i][j+<span class="number">1</span>]*rm[i][j]+<span class="number">2</span>)/(<span class="number">1</span>-s[i][j]);</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="built_in">printf</span>(<span class="string">"%.3lf\n"</span>,f[<span class="number">1</span>][<span class="number">1</span>]);</div><div class="line"> }</div><div class="line"> <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line">}</div></pre></td></tr></table></figure>
<p>按理说这道题挺简单的,然而却有几个不大不小的槽点。这道题我第一遍交的时候按照每个点一组数据,数组开的float,结果WA了,第二遍开的double,按每个点多数据打的,然后就A了。。。不知道是精度问题还是hdu又一次不带提醒的用的多数据。。。。还有一个槽点的是答案保证不超过1000000,然而若中间的某点只能在原地走的话,期望就是INF,而我们把这样的点的期望赋值成了0,就相当于把这个点当成了又一个终点,可能会导致答案错误,不清楚数据是不是特意避开了这样的情况,还是标程就是错的没有考虑这种情况,反正我A了~如果有哪位dalao知道赋值为INF的正确做法的话,欢迎指出发到我邮箱里sounkix@outlook.com,非常感谢!</p>
]]></content>
<categories>
<category> hdu </category>
</categories>
<tags>
<tag> DP </tag>
<tag> 期望 </tag>
</tags>
</entry>
<entry>
<title><![CDATA[Hello, world.]]></title>
<url>/new-world/Hello/</url>
<content type="html"><![CDATA[<p>所以,从前天就一直开始搞的这个博客,到今天终于是差不多整好了。真是长舒了一口气。虽然之间发生了很多鬼事,不过谢天谢地到最后所有事都在掌控之中。</p>
<a id="more"></a>
<h3 id="非常感谢的一些人:"><a href="#非常感谢的一些人:" class="headerlink" title="非常感谢的一些人:"></a>非常感谢的一些人:</h3><ul>
<li><a href="https://yzyun.pw" target="_blank" rel="external">yzyun</a> dalao,是比我先整blog的人,也是因为他的影响我才开始有了开博客的念头,在搭建博客的过程中包括关于Hexo模板的种种问题以及域名的购置及解析都帮了我非常非常大的忙。</li>
<li><a href="https://ytoworld.tk" target="_blank" rel="external">yto</a> 貌似是最先有博客的dalao,对一些系统和github的知识非常熟悉并且帮助人时非常亲切~</li>
<li>同机房的czd帮我用支付宝付了域名的费用,非常感谢并再一次使我认识到了财政独立的重要性。</li>
<li>HYS dalao,不折不扣的真正巨神,在出题的百忙之余帮没带手机的我用自己的手机完成了一些账号的短信验证。非常感谢他的帮忙并日常膜拜</li>
<li><a href="http://go.kieran.top" target="_blank" rel="external">kieran</a> 并不认识这位大佬,但博客第一个主题是用的这位大牛的<a href="https://github.com/SuperKieran/TKL" target="_blank" rel="external">TKL</a>,并且背景的两只小猫也是TKL原来的背景。虽然因为dalao的使用文档是全英的,蒟蒻根本看不懂,但是页面非常漂亮!如果有哪位也有意想要搭个类似的博客的话,可以考虑一下这位大佬的主题!</li>
<li><a href="https://material.viosey.com/" target="_blank" rel="external">Viosey</a> <del>这位大佬设计了我现在使用的主题</del>(因种种原因已弃用),各方面都非常棒!并且提供了详细的中文说明文档,非常照顾我这种小白!强烈安利!<br>还有这个博客的一些图片,以及搭建过程中一些小问题的解决,都是各位网友前辈留下来的,在这里也要说声谢谢。</li>
</ul>
<hr>
<p>然后,按照惯例:</p>
<p><em>Hello, world.</em></p>
<figure class="highlight cpp"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div></pre></td><td class="code"><pre><div class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><iostream></span></span></div><div class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</div><div class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></div><div class="line"><span class="function"></span>{</div><div class="line"> <span class="built_in">cout</span><<<span class="string">"Hello, world."</span>;</div><div class="line"> <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line">}</div></pre></td></tr></table></figure>
<blockquote>
<p><em>They say no one cares, no one sees, no one can get though</em></p>
<p><em>However, as I know I’m not the only one,I say:</em></p>
<p><em>“Well,but we do.</em></p>
</blockquote>
]]></content>
<categories>
<category> 新世界 </category>
</categories>
<tags>
<tag> 新世界 </tag>
</tags>
</entry>
</search>