﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-y @ The Angry Teletubbies-文章分类-Graph Theory</title><link>http://www.cppblog.com/y346491470/category/17487.html</link><description>为梦想而奋斗！</description><language>zh-cn</language><lastBuildDate>Sun, 29 Jul 2012 14:31:55 GMT</lastBuildDate><pubDate>Sun, 29 Jul 2012 14:31:55 GMT</pubDate><ttl>60</ttl><item><title>hdoj 4307 Matrix - 最大流最小割</title><link>http://www.cppblog.com/y346491470/articles/185365.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Fri, 27 Jul 2012 12:06:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/185365.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/185365.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/185365.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/185365.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/185365.html</trackback:ping><description><![CDATA[【题意】：给出一个矩阵方程D = (A * B - C) * A<sup>T</sup>，已知矩阵B[n*n]和矩阵C[1*n]，现在要你求一个01矩阵A[1*n]使得D最大，问D最大是多少。<br /><br />【题解】：这个题目可以转化为poj 3469.<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 对于矩阵B来说，选到某一列i，那么也要选到C[i]。于是可以转化一下问题，对于B的每一列都存在选与不选的情况，而这些情况刚刚好对应着矩阵A。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 那么我们假设先把B的所有列都选上，再通过调整。如果B某一列i不选，那么代价是这一列的和，如果选上，代价就是C[i]，对于选择了列i而没选列j这种情况，我们的代价是B[i][j]，于是我们可以把问题转化为最小割。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 把每列抽象成一个结点。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 源点s连边每列，容量为这一列的和；<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 每一列向汇点t连边，容量为C[i]；<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 列i向列j连边，容量为b[j][i]；<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 最后答案就是 &#8721;b[i][j] - mincut / maxflow.<br /><br />【代码】：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp; 1</span>&nbsp;#include&nbsp;"iostream"<br /><span style="color: #008080; ">&nbsp;&nbsp;2</span>&nbsp;#include&nbsp;"cstdio"<br /><span style="color: #008080; ">&nbsp;&nbsp;3</span>&nbsp;#include&nbsp;"cstring"<br /><span style="color: #008080; ">&nbsp;&nbsp;4</span>&nbsp;#include&nbsp;"algorithm"<br /><span style="color: #008080; ">&nbsp;&nbsp;5</span>&nbsp;#include&nbsp;"vector"<br /><span style="color: #008080; ">&nbsp;&nbsp;6</span>&nbsp;#include&nbsp;"queue"<br /><span style="color: #008080; ">&nbsp;&nbsp;7</span>&nbsp;#include&nbsp;"cmath"<br /><span style="color: #008080; ">&nbsp;&nbsp;8</span>&nbsp;#include&nbsp;"string"<br /><span style="color: #008080; ">&nbsp;&nbsp;9</span>&nbsp;#include&nbsp;"cctype"<br /><span style="color: #008080; ">&nbsp;10</span>&nbsp;#include&nbsp;"map"<br /><span style="color: #008080; ">&nbsp;11</span>&nbsp;#include&nbsp;"iomanip"<br /><span style="color: #008080; ">&nbsp;12</span>&nbsp;#include&nbsp;"set"<br /><span style="color: #008080; ">&nbsp;13</span>&nbsp;#include&nbsp;"utility"<br /><span style="color: #008080; ">&nbsp;14</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008080; ">&nbsp;15</span>&nbsp;typedef&nbsp;pair&lt;<span style="color: #0000FF; ">int</span>,&nbsp;<span style="color: #0000FF; ">int</span>&gt;&nbsp;pii;<br /><span style="color: #008080; ">&nbsp;16</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;pb&nbsp;push_back<br /><span style="color: #008080; ">&nbsp;17</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;mp&nbsp;make_pair<br /><span style="color: #008080; ">&nbsp;18</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;fi&nbsp;first<br /><span style="color: #008080; ">&nbsp;19</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;se&nbsp;second<br /><span style="color: #008080; ">&nbsp;20</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;sof(x)&nbsp;sizeof(x)<br /><span style="color: #008080; ">&nbsp;21</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1)<br /><span style="color: #008080; ">&nbsp;22</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;rc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1&nbsp;|&nbsp;1)<br /><span style="color: #008080; ">&nbsp;23</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lowbit(x)&nbsp;(x&nbsp;&amp;&nbsp;(-x))<br /><span style="color: #008080; ">&nbsp;24</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;ll&nbsp;long&nbsp;long<br /><span style="color: #008080; ">&nbsp;25</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxn&nbsp;1050<br /><span style="color: #008080; ">&nbsp;26</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxm&nbsp;3000000<br /><span style="color: #008080; ">&nbsp;27</span>&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;inf&nbsp;=&nbsp;1&nbsp;&lt;&lt;&nbsp;30;<br /><span style="color: #008080; ">&nbsp;28</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n,&nbsp;m,&nbsp;s,&nbsp;t;<br /><span style="color: #008080; ">&nbsp;29</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;b[maxn][maxn],&nbsp;c[maxn],&nbsp;cc[maxn];<br /><span style="color: #008080; ">&nbsp;30</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;eh[maxn],&nbsp;low[maxn],&nbsp;dist[maxn],&nbsp;pre[maxn],&nbsp;cur[maxn],&nbsp;tot,&nbsp;cnt[maxn];<br /><span style="color: #008080; ">&nbsp;31</span>&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;Edge&nbsp;{<br /><span style="color: #008080; ">&nbsp;32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;v,&nbsp;cap,&nbsp;flow,&nbsp;next;<br /><span style="color: #008080; ">&nbsp;33</span>&nbsp;}et[maxm];<br /><span style="color: #008080; ">&nbsp;34</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;init()&nbsp;{<br /><span style="color: #008080; ">&nbsp;35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tot&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">&nbsp;36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(eh,&nbsp;-1,&nbsp;<span style="color: #0000FF; ">sizeof</span>(eh));<br /><span style="color: #008080; ">&nbsp;37</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;38</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;add(<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;v,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cap,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;flow)&nbsp;{<br /><span style="color: #008080; ">&nbsp;39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Edge&nbsp;e&nbsp;=&nbsp;{u,&nbsp;v,&nbsp;cap,&nbsp;flow,&nbsp;eh[u]};<br /><span style="color: #008080; ">&nbsp;40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;et[tot]&nbsp;=&nbsp;e;<br /><span style="color: #008080; ">&nbsp;41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eh[u]&nbsp;=&nbsp;tot++;<br /><span style="color: #008080; ">&nbsp;42</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;43</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;addedge(<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;v,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cap)&nbsp;{<br /><span style="color: #008080; ">&nbsp;44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add(u,&nbsp;v,&nbsp;cap,&nbsp;0),&nbsp;add(v,&nbsp;u,&nbsp;0,&nbsp;0);<br /><span style="color: #008080; ">&nbsp;45</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;46</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;isap(<span style="color: #0000FF; ">int</span>&nbsp;s,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;t,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n){<br /><span style="color: #008080; ">&nbsp;47</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;v,&nbsp;now,&nbsp;flow&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">&nbsp;48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(dist,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(dist));&nbsp;<br /><span style="color: #008080; ">&nbsp;49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(low,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(low));<br /><span style="color: #008080; ">&nbsp;50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(cnt,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(cnt));<br /><span style="color: #008080; ">&nbsp;51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(u&nbsp;=&nbsp;0&nbsp;;&nbsp;u&nbsp;&lt;=&nbsp;n&nbsp;;&nbsp;u&nbsp;++)&nbsp;cur[u]&nbsp;=&nbsp;eh[u];<br /><span style="color: #008080; ">&nbsp;52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;low[s]&nbsp;=&nbsp;inf,&nbsp;cnt[0]&nbsp;=&nbsp;n,&nbsp;u&nbsp;=&nbsp;s;<br /><span style="color: #008080; ">&nbsp;53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(dist[s]&nbsp;&lt;&nbsp;n)&nbsp;{<br /><span style="color: #008080; ">&nbsp;54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(now&nbsp;=&nbsp;cur[u];&nbsp;now&nbsp;!=&nbsp;-1;&nbsp;now&nbsp;=&nbsp;et[now].next)<br /><span style="color: #008080; ">&nbsp;55</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(et[now].cap&nbsp;-&nbsp;et[now].flow&nbsp;&amp;&amp;&nbsp;dist[u]&nbsp;==&nbsp;dist[&nbsp;v&nbsp;=&nbsp;et[now].v&nbsp;]&nbsp;+&nbsp;1&nbsp;)&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">&nbsp;56</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(now&nbsp;!=&nbsp;-1)&nbsp;{<br /><span style="color: #008080; ">&nbsp;57</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cur[u]&nbsp;=&nbsp;pre[v]&nbsp;=&nbsp;now;<br /><span style="color: #008080; ">&nbsp;58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;low[v]&nbsp;=&nbsp;min(et[now].cap&nbsp;-&nbsp;et[now].flow,&nbsp;low[u]);<br /><span style="color: #008080; ">&nbsp;59</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u&nbsp;=&nbsp;v;<br /><span style="color: #008080; ">&nbsp;60</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(u&nbsp;==&nbsp;t)&nbsp;{<br /><span style="color: #008080; ">&nbsp;61</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(;&nbsp;u&nbsp;!=&nbsp;s;&nbsp;u&nbsp;=&nbsp;et[pre[u]].u){<br /><span style="color: #008080; ">&nbsp;62</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;et[pre[u]].flow&nbsp;+=&nbsp;low[t];<br /><span style="color: #008080; ">&nbsp;63</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;et[pre[u]^1].flow&nbsp;-=&nbsp;low[t];<br /><span style="color: #008080; ">&nbsp;64</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;65</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flow&nbsp;+=&nbsp;low[t];&nbsp;low[s]&nbsp;=&nbsp;inf;<br /><span style="color: #008080; ">&nbsp;66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br /><span style="color: #008080; ">&nbsp;68</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(--cnt[dist[u]]&nbsp;==&nbsp;0)&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">&nbsp;69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[u]&nbsp;=&nbsp;n,&nbsp;cur[u]&nbsp;=&nbsp;eh[u];<br /><span style="color: #008080; ">&nbsp;70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(now&nbsp;=&nbsp;eh[u];&nbsp;now&nbsp;!=&nbsp;-1;&nbsp;now&nbsp;=&nbsp;et[now].next)<br /><span style="color: #008080; ">&nbsp;71</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(et[now].cap&nbsp;-&nbsp;et[now].flow&nbsp;&amp;&amp;&nbsp;dist[u]&nbsp;&gt;&nbsp;dist[et[now].v]&nbsp;+&nbsp;1)<br /><span style="color: #008080; ">&nbsp;72</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[u]&nbsp;=&nbsp;dist[&nbsp;et[now].v&nbsp;]&nbsp;+&nbsp;1;<br /><span style="color: #008080; ">&nbsp;73</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnt[dist[u]]++;<br /><span style="color: #008080; ">&nbsp;74</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(u&nbsp;!=&nbsp;s)&nbsp;u&nbsp;=&nbsp;et[pre[u]].u;<br /><span style="color: #008080; ">&nbsp;75</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;76</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;77</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;flow;<br /><span style="color: #008080; ">&nbsp;78</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;79</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;80</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;build()&nbsp;{<br /><span style="color: #008080; ">&nbsp;81</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;=&nbsp;0,&nbsp;t&nbsp;=&nbsp;n&nbsp;+&nbsp;1;<br /><span style="color: #008080; ">&nbsp;82</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)&nbsp;addedge(s,&nbsp;i,&nbsp;cc[i]),&nbsp;addedge(i,&nbsp;t,&nbsp;c[i]);<br /><span style="color: #008080; ">&nbsp;83</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)<br /><span style="color: #008080; ">&nbsp;84</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;1;&nbsp;j&nbsp;&lt;=&nbsp;n;&nbsp;j++)&nbsp;<br /><span style="color: #008080; ">&nbsp;85</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(i&nbsp;!=&nbsp;j)&nbsp;addedge(j,&nbsp;i,&nbsp;b[i][j]);<br /><span style="color: #008080; ">&nbsp;86</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;87</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;88</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br /><span style="color: #008080; ">&nbsp;89</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;T;<br /><span style="color: #008080; ">&nbsp;90</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&amp;T);<br /><span style="color: #008080; ">&nbsp;91</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(T--)&nbsp;{<br /><span style="color: #008080; ">&nbsp;92</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();<br /><span style="color: #008080; ">&nbsp;93</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&amp;n);<br /><span style="color: #008080; ">&nbsp;94</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;sum&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">&nbsp;95</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(cc,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(cc));<br /><span style="color: #008080; ">&nbsp;96</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)<br /><span style="color: #008080; ">&nbsp;97</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;1;&nbsp;j&nbsp;&lt;=&nbsp;n;&nbsp;j++)&nbsp;{<br /><span style="color: #008080; ">&nbsp;98</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&amp;b[i][j]);<br /><span style="color: #008080; ">&nbsp;99</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum&nbsp;+=&nbsp;b[i][j];<br /><span style="color: #008080; ">100</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cc[j]&nbsp;+=&nbsp;b[i][j];<br /><span style="color: #008080; ">101</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">102</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)&nbsp;scanf("%d",&nbsp;&amp;c[i]);<br /><span style="color: #008080; ">103</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;build();<br /><span style="color: #008080; ">104</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cut&nbsp;=&nbsp;isap(s,&nbsp;t,&nbsp;n&nbsp;+&nbsp;2);<br /><span style="color: #008080; ">105</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",&nbsp;sum&nbsp;-&nbsp;cut);<br /><span style="color: #008080; ">106</span>&nbsp;<br /><span style="color: #008080; ">107</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">108</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">109</span>&nbsp;}<br /><span style="color: #008080; ">110</span>&nbsp;</div><img src ="http://www.cppblog.com/y346491470/aggbug/185365.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2012-07-27 20:06 <a href="http://www.cppblog.com/y346491470/articles/185365.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hdoj 4313 Matrix - 最大生成森林</title><link>http://www.cppblog.com/y346491470/articles/185353.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Fri, 27 Jul 2012 10:29:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/185353.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/185353.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/185353.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/185353.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/185353.html</trackback:ping><description><![CDATA[【题意】：给出一棵树，每条边都有一个价值，现在某k个点有炸弹，要你切断某些边，使得任意两个炸弹不连通。<br /><br />【题解】：这题可以用树dp去解，但是有一种更巧妙的解法。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 删边问题可以转换为求最大生成森林，把边按大到小排序，然后把所有炸弹结点指向同一集合。枚举边，用并查集去判断添加这条边是否会导致两个炸弹连通。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 其实只是一个Kruskal算法的应用，不过转换确实巧妙。<br /><br />【代码】：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;#include&nbsp;"iostream"<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;#include&nbsp;"cstdio"<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;#include&nbsp;"cstring"<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;#include&nbsp;"algorithm"<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;#include&nbsp;"vector"<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;#include&nbsp;"queue"<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;#include&nbsp;"cmath"<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;#include&nbsp;"string"<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;#include&nbsp;"cctype"<br /><span style="color: #008080; ">10</span>&nbsp;#include&nbsp;"map"<br /><span style="color: #008080; ">11</span>&nbsp;#include&nbsp;"iomanip"<br /><span style="color: #008080; ">12</span>&nbsp;#include&nbsp;"set"<br /><span style="color: #008080; ">13</span>&nbsp;#include&nbsp;"utility"<br /><span style="color: #008080; ">14</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008080; ">15</span>&nbsp;typedef&nbsp;pair&lt;<span style="color: #0000FF; ">int</span>,&nbsp;<span style="color: #0000FF; ">int</span>&gt;&nbsp;pii;<br /><span style="color: #008080; ">16</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;pb&nbsp;push_back<br /><span style="color: #008080; ">17</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;mp&nbsp;make_pair<br /><span style="color: #008080; ">18</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;fi&nbsp;first<br /><span style="color: #008080; ">19</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;se&nbsp;second<br /><span style="color: #008080; ">20</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;sof(x)&nbsp;sizeof(x)<br /><span style="color: #008080; ">21</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1)<br /><span style="color: #008080; ">22</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;rc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1&nbsp;|&nbsp;1)<br /><span style="color: #008080; ">23</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lowbit(x)&nbsp;(x&nbsp;&amp;&nbsp;(-x))<br /><span style="color: #008080; ">24</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;ll&nbsp;long&nbsp;long<br /><span style="color: #008080; ">25</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxn&nbsp;100050<br /><span style="color: #008080; ">26</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;fa[maxn],&nbsp;tot;<br /><span style="color: #008080; ">27</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n,&nbsp;k;<br /><span style="color: #008080; ">28</span>&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;Edge&nbsp;{<br /><span style="color: #008080; ">29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;v;<br /><span style="color: #008080; ">30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ll&nbsp;w;<br /><span style="color: #008080; ">31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Edge(){};<br /><span style="color: #008080; ">32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Edge(<span style="color: #0000FF; ">int</span>&nbsp;_u,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;_v,&nbsp;ll&nbsp;_w)&nbsp;{<br /><span style="color: #008080; ">33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u&nbsp;=&nbsp;_u,&nbsp;v&nbsp;=&nbsp;_v,&nbsp;w&nbsp;=&nbsp;_w;<br /><span style="color: #008080; ">34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;<span style="color: #0000FF; ">operator</span>&lt;(<span style="color: #0000FF; ">const</span>&nbsp;Edge&nbsp;&amp;x)&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;{<br /><span style="color: #008080; ">36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;w&nbsp;&gt;&nbsp;x.w;<br /><span style="color: #008080; ">37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">38</span>&nbsp;}et[maxn];<br /><span style="color: #008080; ">39</span>&nbsp;<br /><span style="color: #008080; ">40</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;init()&nbsp;{<br /><span style="color: #008080; ">41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;maxn;&nbsp;i++)&nbsp;fa[i]&nbsp;=&nbsp;i;<br /><span style="color: #008080; ">42</span>&nbsp;}<br /><span style="color: #008080; ">43</span>&nbsp;<br /><span style="color: #008080; ">44</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;find(<span style="color: #0000FF; ">int</span>&nbsp;x)&nbsp;{<br /><span style="color: #008080; ">45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(x&nbsp;==&nbsp;fa[x])&nbsp;?&nbsp;x&nbsp;:&nbsp;fa[x]&nbsp;=&nbsp;find(fa[x]);<br /><span style="color: #008080; ">46</span>&nbsp;}<br /><span style="color: #008080; ">47</span>&nbsp;<br /><span style="color: #008080; ">48</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;Union(<span style="color: #0000FF; ">int</span>&nbsp;a,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;b)&nbsp;{<br /><span style="color: #008080; ">49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;find(a),&nbsp;b&nbsp;=&nbsp;find(b);<br /><span style="color: #008080; ">50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(a&nbsp;==&nbsp;b)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br /><span style="color: #008080; ">51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br /><span style="color: #008080; ">52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fa[a]&nbsp;=&nbsp;b;<br /><span style="color: #008080; ">53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">55</span>&nbsp;}<br /><span style="color: #008080; ">56</span>&nbsp;<br /><span style="color: #008080; ">57</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br /><span style="color: #008080; ">58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;T;<br /><span style="color: #008080; ">59</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&amp;T);<br /><span style="color: #008080; ">60</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(T--)&nbsp;{<br /><span style="color: #008080; ">61</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d",&nbsp;&amp;n,&nbsp;&amp;k);<br /><span style="color: #008080; ">62</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();<br /><span style="color: #008080; ">63</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tot&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">64</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">65</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;v;<br /><span style="color: #008080; ">66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ll&nbsp;w;<br /><span style="color: #008080; ">67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d%I64d",&nbsp;&amp;u,&nbsp;&amp;v,&nbsp;&amp;w);<br /><span style="color: #008080; ">68</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;et[tot++]&nbsp;=&nbsp;Edge(u,&nbsp;v,&nbsp;w);<br /><span style="color: #008080; ">69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;k;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">71</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;a;<br /><span style="color: #008080; ">72</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&amp;a);<br /><span style="color: #008080; ">73</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fa[a]&nbsp;=&nbsp;n;<br /><span style="color: #008080; ">74</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">75</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sort(et,&nbsp;et&nbsp;+&nbsp;tot);<br /><span style="color: #008080; ">76</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ll&nbsp;ans&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">77</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;tot;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">78</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!Union(et[i].u,&nbsp;et[i].v))&nbsp;ans&nbsp;+=&nbsp;et[i].w;<br /><span style="color: #008080; ">79</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">80</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;&lt;&lt;&nbsp;ans&nbsp;&lt;&lt;&nbsp;endl;<br /><span style="color: #008080; ">81</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">82</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">83</span>&nbsp;}<br /><span style="color: #008080; ">84</span>&nbsp;</div><img src ="http://www.cppblog.com/y346491470/aggbug/185353.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2012-07-27 18:29 <a href="http://www.cppblog.com/y346491470/articles/185353.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hdoj 3572 Task Schedule - 最大流</title><link>http://www.cppblog.com/y346491470/articles/185028.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Wed, 25 Jul 2012 07:24:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/185028.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/185028.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/185028.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/185028.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/185028.html</trackback:ping><description><![CDATA[【题意】：给出n个任务和m个机器，每个机器每天只能运行一个任务。对于每个任务，有三个属性p，s，e，表示这个任务至少要在s天后开始运行，至多要在e天前结束运行，并且需要运行p天。问是否存在一种方案使得这n个任务都完成。<br /><br />【题解】：用网络流来判断是否可行。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 把每个任务看成一个点，s到每个任务连边，容量为任务需要运行的天数。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 把每天看成一个点，每天向t连边，容量为m，表示一天最多运行m个任务。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 每个任务都向s-e天连边，容量为1，表示这个任务可以在这些天运行。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 最后判断最大流是否等于所有任务需要运行的天数总和即可。<br /><br />【代码】：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp; 1</span>&nbsp;#include&nbsp;"iostream"<br /><span style="color: #008080; ">&nbsp;&nbsp;2</span>&nbsp;#include&nbsp;"cstdio"<br /><span style="color: #008080; ">&nbsp;&nbsp;3</span>&nbsp;#include&nbsp;"cstring"<br /><span style="color: #008080; ">&nbsp;&nbsp;4</span>&nbsp;#include&nbsp;"algorithm"<br /><span style="color: #008080; ">&nbsp;&nbsp;5</span>&nbsp;#include&nbsp;"vector"<br /><span style="color: #008080; ">&nbsp;&nbsp;6</span>&nbsp;#include&nbsp;"queue"<br /><span style="color: #008080; ">&nbsp;&nbsp;7</span>&nbsp;#include&nbsp;"cmath"<br /><span style="color: #008080; ">&nbsp;&nbsp;8</span>&nbsp;#include&nbsp;"string"<br /><span style="color: #008080; ">&nbsp;&nbsp;9</span>&nbsp;#include&nbsp;"cctype"<br /><span style="color: #008080; ">&nbsp;10</span>&nbsp;#include&nbsp;"map"<br /><span style="color: #008080; ">&nbsp;11</span>&nbsp;#include&nbsp;"iomanip"<br /><span style="color: #008080; ">&nbsp;12</span>&nbsp;#include&nbsp;"set"<br /><span style="color: #008080; ">&nbsp;13</span>&nbsp;#include&nbsp;"utility"<br /><span style="color: #008080; ">&nbsp;14</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008080; ">&nbsp;15</span>&nbsp;typedef&nbsp;pair&lt;<span style="color: #0000FF; ">int</span>,&nbsp;<span style="color: #0000FF; ">int</span>&gt;&nbsp;pii;<br /><span style="color: #008080; ">&nbsp;16</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;pb&nbsp;push_back<br /><span style="color: #008080; ">&nbsp;17</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;mp&nbsp;make_pair<br /><span style="color: #008080; ">&nbsp;18</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;fi&nbsp;first<br /><span style="color: #008080; ">&nbsp;19</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;se&nbsp;second<br /><span style="color: #008080; ">&nbsp;20</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;sof(x)&nbsp;sizeof(x)<br /><span style="color: #008080; ">&nbsp;21</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1)<br /><span style="color: #008080; ">&nbsp;22</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;rc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1&nbsp;|&nbsp;1)<br /><span style="color: #008080; ">&nbsp;23</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lowbit(x)&nbsp;(x&nbsp;&amp;&nbsp;(-x))<br /><span style="color: #008080; ">&nbsp;24</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;ll&nbsp;long&nbsp;long<br /><span style="color: #008080; ">&nbsp;25</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;26</span>&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;inf&nbsp;=&nbsp;1&nbsp;&lt;&lt;&nbsp;30;<br /><span style="color: #008080; ">&nbsp;27</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxn&nbsp;1500<br /><span style="color: #008080; ">&nbsp;28</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxm&nbsp;1000000<br /><span style="color: #008080; ">&nbsp;29</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n,&nbsp;m,&nbsp;s,&nbsp;t;<br /><span style="color: #008080; ">&nbsp;30</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;eh[maxn],&nbsp;low[maxn],&nbsp;dist[maxn],&nbsp;pre[maxn],&nbsp;cur[maxn],&nbsp;tot,&nbsp;cnt[maxn];<br /><span style="color: #008080; ">&nbsp;31</span>&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;Edge&nbsp;{<br /><span style="color: #008080; ">&nbsp;32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;v,&nbsp;cap,&nbsp;flow,&nbsp;next;<br /><span style="color: #008080; ">&nbsp;33</span>&nbsp;}et[maxm];<br /><span style="color: #008080; ">&nbsp;34</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;init()&nbsp;{<br /><span style="color: #008080; ">&nbsp;35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tot&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">&nbsp;36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(eh,&nbsp;-1,&nbsp;<span style="color: #0000FF; ">sizeof</span>(eh));<br /><span style="color: #008080; ">&nbsp;37</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;38</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;add(<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;v,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cap,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;flow)&nbsp;{<br /><span style="color: #008080; ">&nbsp;39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Edge&nbsp;e&nbsp;=&nbsp;{u,&nbsp;v,&nbsp;cap,&nbsp;flow,&nbsp;eh[u]};<br /><span style="color: #008080; ">&nbsp;40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;et[tot]&nbsp;=&nbsp;e;<br /><span style="color: #008080; ">&nbsp;41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eh[u]&nbsp;=&nbsp;tot++;<br /><span style="color: #008080; ">&nbsp;42</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;43</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;addedge(<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;v,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cap)&nbsp;{<br /><span style="color: #008080; ">&nbsp;44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add(u,&nbsp;v,&nbsp;cap,&nbsp;0),&nbsp;add(v,&nbsp;u,&nbsp;0,&nbsp;0);<br /><span style="color: #008080; ">&nbsp;45</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;46</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;isap(<span style="color: #0000FF; ">int</span>&nbsp;s,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;t,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n){<br /><span style="color: #008080; ">&nbsp;47</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;v,&nbsp;now,&nbsp;flow&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">&nbsp;48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(dist,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(dist));&nbsp;<br /><span style="color: #008080; ">&nbsp;49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(low,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(low));<br /><span style="color: #008080; ">&nbsp;50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(cnt,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(cnt));<br /><span style="color: #008080; ">&nbsp;51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(u&nbsp;=&nbsp;0&nbsp;;&nbsp;u&nbsp;&lt;=&nbsp;n&nbsp;;&nbsp;u&nbsp;++)&nbsp;cur[u]&nbsp;=&nbsp;eh[u];<br /><span style="color: #008080; ">&nbsp;52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;low[s]&nbsp;=&nbsp;inf,&nbsp;cnt[0]&nbsp;=&nbsp;n,&nbsp;u&nbsp;=&nbsp;s;<br /><span style="color: #008080; ">&nbsp;53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(dist[s]&nbsp;&lt;&nbsp;n)&nbsp;{<br /><span style="color: #008080; ">&nbsp;54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(now&nbsp;=&nbsp;cur[u];&nbsp;now&nbsp;!=&nbsp;-1;&nbsp;now&nbsp;=&nbsp;et[now].next)<br /><span style="color: #008080; ">&nbsp;55</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(et[now].cap&nbsp;-&nbsp;et[now].flow&nbsp;&amp;&amp;&nbsp;dist[u]&nbsp;==&nbsp;dist[&nbsp;v&nbsp;=&nbsp;et[now].v&nbsp;]&nbsp;+&nbsp;1&nbsp;)&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">&nbsp;56</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(now&nbsp;!=&nbsp;-1)&nbsp;{<br /><span style="color: #008080; ">&nbsp;57</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cur[u]&nbsp;=&nbsp;pre[v]&nbsp;=&nbsp;now;<br /><span style="color: #008080; ">&nbsp;58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;low[v]&nbsp;=&nbsp;min(et[now].cap&nbsp;-&nbsp;et[now].flow,&nbsp;low[u]);<br /><span style="color: #008080; ">&nbsp;59</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u&nbsp;=&nbsp;v;<br /><span style="color: #008080; ">&nbsp;60</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(u&nbsp;==&nbsp;t)&nbsp;{<br /><span style="color: #008080; ">&nbsp;61</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(;&nbsp;u&nbsp;!=&nbsp;s;&nbsp;u&nbsp;=&nbsp;et[pre[u]].u){<br /><span style="color: #008080; ">&nbsp;62</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;et[pre[u]].flow&nbsp;+=&nbsp;low[t];<br /><span style="color: #008080; ">&nbsp;63</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;et[pre[u]^1].flow&nbsp;-=&nbsp;low[t];<br /><span style="color: #008080; ">&nbsp;64</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;65</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flow&nbsp;+=&nbsp;low[t];&nbsp;low[s]&nbsp;=&nbsp;inf;<br /><span style="color: #008080; ">&nbsp;66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br /><span style="color: #008080; ">&nbsp;68</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(--cnt[dist[u]]&nbsp;==&nbsp;0)&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">&nbsp;69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[u]&nbsp;=&nbsp;n,&nbsp;cur[u]&nbsp;=&nbsp;eh[u];<br /><span style="color: #008080; ">&nbsp;70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(now&nbsp;=&nbsp;eh[u];&nbsp;now&nbsp;!=&nbsp;-1;&nbsp;now&nbsp;=&nbsp;et[now].next)<br /><span style="color: #008080; ">&nbsp;71</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(et[now].cap&nbsp;-&nbsp;et[now].flow&nbsp;&amp;&amp;&nbsp;dist[u]&nbsp;&gt;&nbsp;dist[et[now].v]&nbsp;+&nbsp;1)<br /><span style="color: #008080; ">&nbsp;72</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[u]&nbsp;=&nbsp;dist[&nbsp;et[now].v&nbsp;]&nbsp;+&nbsp;1;<br /><span style="color: #008080; ">&nbsp;73</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnt[dist[u]]++;<br /><span style="color: #008080; ">&nbsp;74</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(u&nbsp;!=&nbsp;s)&nbsp;u&nbsp;=&nbsp;et[pre[u]].u;<br /><span style="color: #008080; ">&nbsp;75</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;76</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;77</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;flow;<br /><span style="color: #008080; ">&nbsp;78</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;79</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;80</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br /><span style="color: #008080; ">&nbsp;81</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;T,&nbsp;Case&nbsp;=&nbsp;1;<br /><span style="color: #008080; ">&nbsp;82</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&amp;T);<br /><span style="color: #008080; ">&nbsp;83</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(T--)&nbsp;{<br /><span style="color: #008080; ">&nbsp;84</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d",&nbsp;&amp;n,&nbsp;&amp;m);<br /><span style="color: #008080; ">&nbsp;85</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();<br /><span style="color: #008080; ">&nbsp;86</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;=&nbsp;0,&nbsp;t&nbsp;=&nbsp;n&nbsp;+&nbsp;500&nbsp;+&nbsp;1;<br /><span style="color: #008080; ">&nbsp;87</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;sum&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">&nbsp;88</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">&nbsp;89</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;p,&nbsp;start,&nbsp;end;<br /><span style="color: #008080; ">&nbsp;90</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d%d",&nbsp;&amp;p,&nbsp;&amp;start,&nbsp;&amp;end);<br /><span style="color: #008080; ">&nbsp;91</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum&nbsp;+=&nbsp;p;<br /><span style="color: #008080; ">&nbsp;92</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addedge(s,&nbsp;i,&nbsp;p);<br /><span style="color: #008080; ">&nbsp;93</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;start;&nbsp;j&nbsp;&lt;=&nbsp;end;&nbsp;j++)&nbsp;{<br /><span style="color: #008080; ">&nbsp;94</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addedge(i,&nbsp;n&nbsp;+&nbsp;j,&nbsp;1);<br /><span style="color: #008080; ">&nbsp;95</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;96</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;97</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("Case&nbsp;%d:&nbsp;",&nbsp;Case++);<br /><span style="color: #008080; ">&nbsp;98</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;500;&nbsp;i++)&nbsp;addedge(i&nbsp;+&nbsp;n,&nbsp;t,&nbsp;m);<br /><span style="color: #008080; ">&nbsp;99</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(sum&nbsp;==&nbsp;isap(s,&nbsp;t,&nbsp;2&nbsp;+&nbsp;n&nbsp;+&nbsp;500))&nbsp;puts("Yes");<br /><span style="color: #008080; ">100</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;puts("No");<br /><span style="color: #008080; ">101</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;&lt;&lt;&nbsp;endl;<br /><span style="color: #008080; ">102</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">103</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">104</span>&nbsp;}<br /><span style="color: #008080; ">105</span>&nbsp;</div><img src ="http://www.cppblog.com/y346491470/aggbug/185028.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2012-07-25 15:24 <a href="http://www.cppblog.com/y346491470/articles/185028.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>uva 4039 Sightseeing - KM + 二分图最优匹配</title><link>http://www.cppblog.com/y346491470/articles/184543.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Sat, 21 Jul 2012 17:47:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/184543.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/184543.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/184543.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/184543.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/184543.html</trackback:ping><description><![CDATA[【题意】：给出一副无向图，n个点m条边，每条边上都有一个权值，表示通过这条边的费用。现在问任选一个点i开始遍历完所有边至少一次回到i的最小费用是多少。<br /><br />【题解】：先累加一次所有边的费用sum，然后保留奇度的点，对于每两个奇度的点连边，费用为点到点的最短距离，求一次最小匹配res。最后答案为sum+res。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 对于用km求最小匹配，把边权取反再加上一个inf，最后减回去即可，没边的权值为0。<br /><br />【代码】：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp; 1</span>&nbsp;#include&nbsp;"iostream"<br /><span style="color: #008080; ">&nbsp;&nbsp;2</span>&nbsp;#include&nbsp;"cstdio"<br /><span style="color: #008080; ">&nbsp;&nbsp;3</span>&nbsp;#include&nbsp;"cstring"<br /><span style="color: #008080; ">&nbsp;&nbsp;4</span>&nbsp;#include&nbsp;"algorithm"<br /><span style="color: #008080; ">&nbsp;&nbsp;5</span>&nbsp;#include&nbsp;"vector"<br /><span style="color: #008080; ">&nbsp;&nbsp;6</span>&nbsp;#include&nbsp;"queue"<br /><span style="color: #008080; ">&nbsp;&nbsp;7</span>&nbsp;#include&nbsp;"cmath"<br /><span style="color: #008080; ">&nbsp;&nbsp;8</span>&nbsp;#include&nbsp;"string"<br /><span style="color: #008080; ">&nbsp;&nbsp;9</span>&nbsp;#include&nbsp;"cctype"<br /><span style="color: #008080; ">&nbsp;10</span>&nbsp;#include&nbsp;"map"<br /><span style="color: #008080; ">&nbsp;11</span>&nbsp;#include&nbsp;"iomanip"<br /><span style="color: #008080; ">&nbsp;12</span>&nbsp;#include&nbsp;"set"<br /><span style="color: #008080; ">&nbsp;13</span>&nbsp;#include&nbsp;"utility"<br /><span style="color: #008080; ">&nbsp;14</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008080; ">&nbsp;15</span>&nbsp;typedef&nbsp;pair&lt;<span style="color: #0000FF; ">int</span>,&nbsp;<span style="color: #0000FF; ">int</span>&gt;&nbsp;pii;<br /><span style="color: #008080; ">&nbsp;16</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;pb&nbsp;push_back<br /><span style="color: #008080; ">&nbsp;17</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;mp&nbsp;make_pair<br /><span style="color: #008080; ">&nbsp;18</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;fi&nbsp;first<br /><span style="color: #008080; ">&nbsp;19</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;se&nbsp;second<br /><span style="color: #008080; ">&nbsp;20</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;sof(x)&nbsp;sizeof(x)<br /><span style="color: #008080; ">&nbsp;21</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1)<br /><span style="color: #008080; ">&nbsp;22</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;rc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1&nbsp;|&nbsp;1)<br /><span style="color: #008080; ">&nbsp;23</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lowbit(x)&nbsp;(x&nbsp;&amp;&nbsp;(-x))<br /><span style="color: #008080; ">&nbsp;24</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;ll&nbsp;long&nbsp;long<br /><span style="color: #008080; ">&nbsp;25</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;MAX&nbsp;110<br /><span style="color: #008080; ">&nbsp;26</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxn&nbsp;110<br /><span style="color: #008080; ">&nbsp;27</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n,&nbsp;m;<br /><span style="color: #008080; ">&nbsp;28</span>&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;inf&nbsp;=&nbsp;100000000;<br /><span style="color: #008080; ">&nbsp;29</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;g[MAX][MAX];<br /><span style="color: #008080; ">&nbsp;30</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;31</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;d[MAX];<br /><span style="color: #008080; ">&nbsp;32</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;maz[maxn][maxn],&nbsp;lx[maxn],&nbsp;ly[maxn],&nbsp;match[maxn],&nbsp;sy[maxn],&nbsp;slack[maxn],&nbsp;sx[maxn];<br /><span style="color: #008080; ">&nbsp;33</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;nx,&nbsp;ny;<br /><span style="color: #008080; ">&nbsp;34</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;q[maxn],&nbsp;tot;<br /><span style="color: #008080; ">&nbsp;35</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;dfs(<span style="color: #0000FF; ">int</span>&nbsp;t)&nbsp;{<br /><span style="color: #008080; ">&nbsp;36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sx[t]&nbsp;=&nbsp;1;<br /><span style="color: #008080; ">&nbsp;37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;ny;&nbsp;++i)&nbsp;{<br /><span style="color: #008080; ">&nbsp;38</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(sy[i])<span style="color: #0000FF; ">continue</span>;<br /><span style="color: #008080; ">&nbsp;39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(maz[t][i]&nbsp;==&nbsp;lx[t]&nbsp;+&nbsp;ly[i])&nbsp;{<br /><span style="color: #008080; ">&nbsp;40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sy[i]&nbsp;=&nbsp;1;<br /><span style="color: #008080; ">&nbsp;41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(match[i]&nbsp;==&nbsp;-1&nbsp;||&nbsp;dfs(match[i]))&nbsp;{<br /><span style="color: #008080; ">&nbsp;42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;match[i]&nbsp;=&nbsp;t;<br /><span style="color: #008080; ">&nbsp;43</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;1;<br /><span style="color: #008080; ">&nbsp;44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;slack[i]&nbsp;=&nbsp;min(slack[i],&nbsp;lx[t]&nbsp;+&nbsp;ly[i]&nbsp;-&nbsp;maz[t][i]);<br /><span style="color: #008080; ">&nbsp;46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;47</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">&nbsp;48</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;49</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Change()&nbsp;{<br /><span style="color: #008080; ">&nbsp;50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;Min&nbsp;=&nbsp;inf;<br /><span style="color: #008080; ">&nbsp;51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;ny;&nbsp;++i)<br /><span style="color: #008080; ">&nbsp;52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!sy[i])&nbsp;Min&nbsp;=&nbsp;min(Min,&nbsp;slack[i]);<br /><span style="color: #008080; ">&nbsp;53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;nx;&nbsp;++i)<br /><span style="color: #008080; ">&nbsp;54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(sx[i])&nbsp;lx[i]&nbsp;-=&nbsp;Min;<br /><span style="color: #008080; ">&nbsp;55</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;ny;&nbsp;++i)&nbsp;{<br /><span style="color: #008080; ">&nbsp;56</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(sy[i])&nbsp;ly[i]&nbsp;+=&nbsp;Min;<br /><span style="color: #008080; ">&nbsp;57</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;slack[i]&nbsp;-=&nbsp;Min;<br /><span style="color: #008080; ">&nbsp;58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;59</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;60</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;KM()&nbsp;{<br /><span style="color: #008080; ">&nbsp;61</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;ans&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">&nbsp;62</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(match,&nbsp;-1,&nbsp;<span style="color: #0000FF; ">sizeof</span>&nbsp;(match));<br /><span style="color: #008080; ">&nbsp;63</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;nx;&nbsp;++i)&nbsp;{<br /><span style="color: #008080; ">&nbsp;64</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;1;&nbsp;j&nbsp;&lt;=&nbsp;ny;&nbsp;++j)<br /><span style="color: #008080; ">&nbsp;65</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;slack[j]&nbsp;=&nbsp;inf;<br /><span style="color: #008080; ">&nbsp;66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(1)&nbsp;{<br /><span style="color: #008080; ">&nbsp;67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(sy,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>&nbsp;(sy));<br /><span style="color: #008080; ">&nbsp;68</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(sx,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>&nbsp;(sx));<br /><span style="color: #008080; ">&nbsp;69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(dfs(i))&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">&nbsp;70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Change();<br /><span style="color: #008080; ">&nbsp;71</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;72</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;73</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;ny;&nbsp;++i)<br /><span style="color: #008080; ">&nbsp;74</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(match[i]&nbsp;!=&nbsp;-1)&nbsp;ans&nbsp;+=&nbsp;inf&nbsp;-&nbsp;maz[match[i]][i];<br /><span style="color: #008080; ">&nbsp;75</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;ans&nbsp;/&nbsp;2;<br /><span style="color: #008080; ">&nbsp;76</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;77</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;build()&nbsp;{<br /><span style="color: #008080; ">&nbsp;78</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(maz,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>&nbsp;(maz));<br /><span style="color: #008080; ">&nbsp;79</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nx&nbsp;=&nbsp;tot;<br /><span style="color: #008080; ">&nbsp;80</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ny&nbsp;=&nbsp;tot;<br /><span style="color: #008080; ">&nbsp;81</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;tot;&nbsp;i++)<br /><span style="color: #008080; ">&nbsp;82</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;0;&nbsp;j&nbsp;&lt;&nbsp;tot;&nbsp;j++)&nbsp;{<br /><span style="color: #008080; ">&nbsp;83</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(i&nbsp;!=&nbsp;j)&nbsp;maz[i+1][j+1]&nbsp;=&nbsp;inf&nbsp;-&nbsp;g[q[i]][q[j]];<br /><span style="color: #008080; ">&nbsp;84</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;85</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(ly,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>&nbsp;(ly));<br /><span style="color: #008080; ">&nbsp;86</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;nx;&nbsp;++i)&nbsp;{<br /><span style="color: #008080; ">&nbsp;87</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lx[i]&nbsp;=&nbsp;-inf;<br /><span style="color: #008080; ">&nbsp;88</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;1;&nbsp;j&nbsp;&lt;=&nbsp;ny;&nbsp;++j)<br /><span style="color: #008080; ">&nbsp;89</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lx[i]&nbsp;=&nbsp;max(lx[i],&nbsp;maz[i][j]);<br /><span style="color: #008080; ">&nbsp;90</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;91</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;92</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;93</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;floyd()&nbsp;{<br /><span style="color: #008080; ">&nbsp;94</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;k&nbsp;=&nbsp;1;&nbsp;k&nbsp;&lt;=&nbsp;n;&nbsp;k++)<br /><span style="color: #008080; ">&nbsp;95</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)<br /><span style="color: #008080; ">&nbsp;96</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;1;&nbsp;j&nbsp;&lt;=&nbsp;n;&nbsp;j++)<br /><span style="color: #008080; ">&nbsp;97</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g[i][j]&nbsp;=&nbsp;min(g[i][j],&nbsp;g[i][k]&nbsp;+&nbsp;g[k][j]);<br /><span style="color: #008080; ">&nbsp;98</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;99</span>&nbsp;<br /><span style="color: #008080; ">100</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br /><span style="color: #008080; ">101</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;T,&nbsp;x;<br /><span style="color: #008080; ">102</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&amp;T);<br /><span style="color: #008080; ">103</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(T--)&nbsp;{<br /><span style="color: #008080; ">104</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d",&nbsp;&amp;n,&nbsp;&amp;m);<br /><span style="color: #008080; ">105</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">106</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;1;&nbsp;j&nbsp;&lt;=&nbsp;n;&nbsp;j++)<br /><span style="color: #008080; ">107</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g[i][j]&nbsp;=&nbsp;inf;<br /><span style="color: #008080; ">108</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g[i][i]&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">109</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">110</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;ans&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">111</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(d,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(d));<br /><span style="color: #008080; ">112</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;m;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">113</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;v,&nbsp;w;<br /><span style="color: #008080; ">114</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d%d",&nbsp;&amp;u,&nbsp;&amp;v,&nbsp;&amp;w);<br /><span style="color: #008080; ">115</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;+=&nbsp;w;<br /><span style="color: #008080; ">116</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g[u][v]&nbsp;=&nbsp;g[v][u]&nbsp;=&nbsp;w;<br /><span style="color: #008080; ">117</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d[u]++,&nbsp;d[v]++;<br /><span style="color: #008080; ">118</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">119</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tot&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">120</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)<br /><span style="color: #008080; ">121</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(d[i]&nbsp;&amp;&nbsp;1)&nbsp;q[tot++]&nbsp;=&nbsp;i;<br /><span style="color: #008080; ">122</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;floyd();<br /><span style="color: #008080; ">123</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;build();<br /><span style="color: #008080; ">124</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;res&nbsp;=&nbsp;KM();<br /><span style="color: #008080; ">125</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;&lt;&lt;&nbsp;ans&nbsp;+&nbsp;res&nbsp;&lt;&lt;&nbsp;endl;<br /><span style="color: #008080; ">126</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&amp;x);<br /><span style="color: #008080; ">127</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(x&nbsp;==&nbsp;-1)&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">128</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">129</span>&nbsp;<br /><span style="color: #008080; ">130</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">131</span>&nbsp;}<br /><span style="color: #008080; ">132</span>&nbsp;</div><img src ="http://www.cppblog.com/y346491470/aggbug/184543.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2012-07-22 01:47 <a href="http://www.cppblog.com/y346491470/articles/184543.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>uva 4041 Eventown Problem - 全局最小割</title><link>http://www.cppblog.com/y346491470/articles/184540.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Sat, 21 Jul 2012 17:05:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/184540.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/184540.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/184540.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/184540.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/184540.html</trackback:ping><description><![CDATA[【题意】：给出n个人，f[i][j]表示他们的友好程度，现在要把这n个人分成两组，使得所有人的开心程度之和最大，既&#8721;&#8721;(-1)<sup>1-s[i][j]</sup>f[i][j]最大化。其中，s[i][j]表示i和j是否同一组。<br /><br />【题解】：先假设所有人都在同一组，sum = &#8721;f[i][j]，然后我们需要改变某些人的关系使得n个人分成两组且代价最小，这样问题就转为求一个无向图的全局最小割。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 最后答案为sum - 4 * mincut。<br /><br />【代码】：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;#include&nbsp;"iostream"<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;#include&nbsp;"cstdio"<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;#include&nbsp;"cstring"<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;#include&nbsp;"algorithm"<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;#include&nbsp;"vector"<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;#include&nbsp;"queue"<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;#include&nbsp;"cmath"<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;#include&nbsp;"string"<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;#include&nbsp;"cctype"<br /><span style="color: #008080; ">10</span>&nbsp;#include&nbsp;"map"<br /><span style="color: #008080; ">11</span>&nbsp;#include&nbsp;"iomanip"<br /><span style="color: #008080; ">12</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008080; ">13</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;pb&nbsp;push_back<br /><span style="color: #008080; ">14</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;mp&nbsp;make_pair<br /><span style="color: #008080; ">15</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;fi&nbsp;first<br /><span style="color: #008080; ">16</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;se&nbsp;second<br /><span style="color: #008080; ">17</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1)<br /><span style="color: #008080; ">18</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;rc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1&nbsp;|&nbsp;1)<br /><span style="color: #008080; ">19</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lowbit(x)&nbsp;(x&nbsp;&amp;&nbsp;(-x))<br /><span style="color: #008080; ">20</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;ll&nbsp;long&nbsp;long<br /><span style="color: #008080; ">21</span>&nbsp;<br /><span style="color: #008080; ">22</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxn&nbsp;100<br /><span style="color: #008080; ">23</span>&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;inf&nbsp;=&nbsp;1&nbsp;&lt;&lt;&nbsp;27;<br /><span style="color: #008080; ">24</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;maz[maxn][maxn];<br /><span style="color: #008080; ">25</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n,&nbsp;m;<br /><span style="color: #008080; ">26</span>&nbsp;<br /><span style="color: #008080; ">27</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;StoerWagner(<span style="color: #0000FF; ">int</span>&nbsp;n)&nbsp;{<span style="color: #008000; ">//</span><span style="color: #008000; ">n&nbsp;为点数</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">28</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;v[maxn],&nbsp;dist[maxn];<br /><span style="color: #008080; ">29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;visit[maxn];<br /><span style="color: #008080; ">30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cut&nbsp;=&nbsp;inf;<br /><span style="color: #008080; ">31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)&nbsp;v[i]&nbsp;=&nbsp;i;<br /><span style="color: #008080; ">32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(n&nbsp;&gt;&nbsp;1)&nbsp;{<br /><span style="color: #008080; ">33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;k&nbsp;=&nbsp;1,&nbsp;pre&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[v[i]]&nbsp;=&nbsp;maz[v[0]][v[i]];<br /><span style="color: #008080; ">36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(dist[v[i]]&nbsp;&gt;&nbsp;dist[v[k]])&nbsp;k&nbsp;=&nbsp;i;<br /><span style="color: #008080; ">37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">38</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(visit,&nbsp;<span style="color: #0000FF; ">false</span>,&nbsp;<span style="color: #0000FF; ">sizeof</span>(visit));<br /><span style="color: #008080; ">39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visit[v[0]]&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(i&nbsp;==&nbsp;n&nbsp;-&nbsp;1)&nbsp;{<br /><span style="color: #008080; ">42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cut&nbsp;=&nbsp;min(cut,&nbsp;dist[v[k]]);<br /><span style="color: #008080; ">43</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;0;&nbsp;j&nbsp;&lt;&nbsp;n;&nbsp;j++)&nbsp;{<br /><span style="color: #008080; ">44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maz[v[pre]][v[j]]&nbsp;+=&nbsp;maz[v[j]][v[k]];<br /><span style="color: #008080; ">45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maz[v[j]][v[pre]]&nbsp;+=&nbsp;maz[v[j]][v[k]];<br /><span style="color: #008080; ">46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">47</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v[k]&nbsp;=&nbsp;v[--n];<br /><span style="color: #008080; ">48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visit[v[k]]&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pre&nbsp;=&nbsp;k,&nbsp;k&nbsp;=&nbsp;-1;<br /><span style="color: #008080; ">51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;1;&nbsp;j&nbsp;&lt;&nbsp;n;&nbsp;j++)&nbsp;{<br /><span style="color: #008080; ">52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!visit[v[j]])&nbsp;{<br /><span style="color: #008080; ">53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[v[j]]&nbsp;+=&nbsp;maz[v[pre]][v[j]];<br /><span style="color: #008080; ">54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(k&nbsp;==&nbsp;-1&nbsp;||&nbsp;dist[v[k]]&nbsp;&lt;&nbsp;dist[v[j]])<br /><span style="color: #008080; ">55</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k&nbsp;=&nbsp;j;<br /><span style="color: #008080; ">56</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">57</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">59</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">60</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;cut;<br /><span style="color: #008080; ">61</span>&nbsp;}<br /><span style="color: #008080; ">62</span>&nbsp;<br /><span style="color: #008080; ">63</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br /><span style="color: #008080; ">64</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;T;<br /><span style="color: #008080; ">65</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(scanf("%d",&nbsp;&amp;T),&nbsp;T)&nbsp;{<br /><span style="color: #008080; ">66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(T--)&nbsp;{<br /><span style="color: #008080; ">67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d",&nbsp;&amp;n,&nbsp;&amp;m);<br /><span style="color: #008080; ">68</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(maz,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(maz));<br /><span style="color: #008080; ">69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;sum&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)<br /><span style="color: #008080; ">71</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;0;&nbsp;j&nbsp;&lt;&nbsp;n;&nbsp;j++)&nbsp;{<br /><span style="color: #008080; ">72</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&amp;maz[i][j]);<br /><span style="color: #008080; ">73</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum&nbsp;+=&nbsp;maz[i][j];<br /><span style="color: #008080; ">74</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">75</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;ans&nbsp;=&nbsp;sum&nbsp;-&nbsp;4&nbsp;*&nbsp;StoerWagner(n);<br /><span style="color: #008080; ">76</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;&lt;&lt;&nbsp;ans&nbsp;&lt;&lt;&nbsp;endl;<br /><span style="color: #008080; ">77</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">78</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">79</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">80</span>&nbsp;}<br /><span style="color: #008080; ">81</span>&nbsp;</div><img src ="http://www.cppblog.com/y346491470/aggbug/184540.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2012-07-22 01:05 <a href="http://www.cppblog.com/y346491470/articles/184540.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hdoj 3622 Bomb Game - 二分 + 2sat</title><link>http://www.cppblog.com/y346491470/articles/184474.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Sat, 21 Jul 2012 05:47:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/184474.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/184474.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/184474.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/184474.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/184474.html</trackback:ping><description><![CDATA[【题意】：<span>给定n组点，每组两个点，要在每组中选一个点安置一个定时炸弹，这个炸弹的范围是以炸弹的位置为圆心的一个圆，半径由你控制。要求安置的n个炸弹不能相互攻击，问最小的圆的半径最大为多少。</span>&nbsp;<br /><br />【题解】：很容易想到二分，然后每组有两个点只能选一个，就是一个2sat问题喇。二分答案用2sat判断即可。<br /><br />【代码】：<br /><div style="font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp; 1</span>&nbsp;#include&nbsp;"iostream"<br /><span style="color: #008080; ">&nbsp;&nbsp;2</span>&nbsp;#include&nbsp;"cstdio"<br /><span style="color: #008080; ">&nbsp;&nbsp;3</span>&nbsp;#include&nbsp;"cstring"<br /><span style="color: #008080; ">&nbsp;&nbsp;4</span>&nbsp;#include&nbsp;"algorithm"<br /><span style="color: #008080; ">&nbsp;&nbsp;5</span>&nbsp;#include&nbsp;"vector"<br /><span style="color: #008080; ">&nbsp;&nbsp;6</span>&nbsp;#include&nbsp;"queue"<br /><span style="color: #008080; ">&nbsp;&nbsp;7</span>&nbsp;#include&nbsp;"cmath"<br /><span style="color: #008080; ">&nbsp;&nbsp;8</span>&nbsp;#include&nbsp;"string"<br /><span style="color: #008080; ">&nbsp;&nbsp;9</span>&nbsp;#include&nbsp;"cctype"<br /><span style="color: #008080; ">&nbsp;10</span>&nbsp;#include&nbsp;"map"<br /><span style="color: #008080; ">&nbsp;11</span>&nbsp;#include&nbsp;"iomanip"<br /><span style="color: #008080; ">&nbsp;12</span>&nbsp;#include&nbsp;"set"<br /><span style="color: #008080; ">&nbsp;13</span>&nbsp;#include&nbsp;"utility"<br /><span style="color: #008080; ">&nbsp;14</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008080; ">&nbsp;15</span>&nbsp;typedef&nbsp;pair&lt;<span style="color: #0000FF; ">int</span>,&nbsp;<span style="color: #0000FF; ">int</span>&gt;&nbsp;pii;<br /><span style="color: #008080; ">&nbsp;16</span>&nbsp;typedef&nbsp;pair&lt;<span style="color: #0000FF; ">double</span>,&nbsp;<span style="color: #0000FF; ">double</span>&gt;&nbsp;pdd;<br /><span style="color: #008080; ">&nbsp;17</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;pb&nbsp;push_back<br /><span style="color: #008080; ">&nbsp;18</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;mp&nbsp;make_pair<br /><span style="color: #008080; ">&nbsp;19</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;fi&nbsp;first<br /><span style="color: #008080; ">&nbsp;20</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;se&nbsp;second<br /><span style="color: #008080; ">&nbsp;21</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;sof(x)&nbsp;sizeof(x)<br /><span style="color: #008080; ">&nbsp;22</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1)<br /><span style="color: #008080; ">&nbsp;23</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;rc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1&nbsp;|&nbsp;1)<br /><span style="color: #008080; ">&nbsp;24</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lowbit(x)&nbsp;(x&nbsp;&amp;&nbsp;(-x))<br /><span style="color: #008080; ">&nbsp;25</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;ll&nbsp;long&nbsp;long<br /><span style="color: #008080; ">&nbsp;26</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;eps&nbsp;1e-6<br /><span style="color: #008080; ">&nbsp;27</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxn&nbsp;550<br /><span style="color: #008080; ">&nbsp;28</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n,&nbsp;nn;<br /><span style="color: #008080; ">&nbsp;29</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;eh[maxn],&nbsp;tot;<br /><span style="color: #008080; ">&nbsp;30</span>&nbsp;vector&lt;<span style="color: #0000FF; ">int</span>&gt;&nbsp;vec[maxn];<br /><span style="color: #008080; ">&nbsp;31</span>&nbsp;pdd&nbsp;p[maxn];<br /><span style="color: #008080; ">&nbsp;32</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;33</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;dfn[maxn],&nbsp;low[maxn],&nbsp;Dindex,&nbsp;instack[maxn],&nbsp;belong[maxn],&nbsp;scc;<br /><span style="color: #008080; ">&nbsp;34</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;s[maxn],&nbsp;top;<br /><span style="color: #008080; ">&nbsp;35</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;36</span>&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;getdist(<span style="color: #0000FF; ">const</span>&nbsp;pdd&nbsp;&amp;a,&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;pdd&nbsp;&amp;b)&nbsp;{<br /><span style="color: #008080; ">&nbsp;37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;sqrt((a.fi&nbsp;-&nbsp;b.fi)&nbsp;*&nbsp;(a.fi&nbsp;-&nbsp;b.fi)&nbsp;+&nbsp;(a.se&nbsp;-&nbsp;b.se)&nbsp;*&nbsp;(a.se&nbsp;-&nbsp;b.se));<br /><span style="color: #008080; ">&nbsp;38</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;39</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;40</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;dfs(<span style="color: #0000FF; ">int</span>&nbsp;u)&nbsp;{<br /><span style="color: #008080; ">&nbsp;41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;v;<br /><span style="color: #008080; ">&nbsp;42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dfn[u]&nbsp;=&nbsp;low[u]&nbsp;=&nbsp;++Dindex;<br /><span style="color: #008080; ">&nbsp;43</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s[++top]&nbsp;=&nbsp;u,&nbsp;instack[u]&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">&nbsp;44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;size&nbsp;=&nbsp;vec[u].size();<br /><span style="color: #008080; ">&nbsp;45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;size;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">&nbsp;46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v&nbsp;=&nbsp;vec[u][i];<br /><span style="color: #008080; ">&nbsp;47</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!dfn[v])&nbsp;dfs(v),&nbsp;low[u]&nbsp;=&nbsp;min(low[u],&nbsp;low[v]);<br /><span style="color: #008080; ">&nbsp;48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>(instack[v])&nbsp;low[u]&nbsp;=&nbsp;min(low[u],&nbsp;dfn[v]);&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(dfn[u]&nbsp;==&nbsp;low[u])&nbsp;{<br /><span style="color: #008080; ">&nbsp;51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scc++;<br /><span style="color: #008080; ">&nbsp;52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">do</span>&nbsp;{<br /><span style="color: #008080; ">&nbsp;53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v&nbsp;=&nbsp;s[top--];<br /><span style="color: #008080; ">&nbsp;54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;instack[v]&nbsp;=&nbsp;<span style="color: #0000FF; ">false</span>;<br /><span style="color: #008080; ">&nbsp;55</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;belong[v]&nbsp;=&nbsp;scc;<br /><span style="color: #008080; ">&nbsp;56</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<span style="color: #0000FF; ">while</span>(v&nbsp;!=&nbsp;u);<br /><span style="color: #008080; ">&nbsp;57</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;58</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;59</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;60</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;tarjan()&nbsp;{<br /><span style="color: #008080; ">&nbsp;61</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top&nbsp;=&nbsp;scc&nbsp;=&nbsp;Dindex&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">&nbsp;62</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(dfn,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(dfn));<br /><span style="color: #008080; ">&nbsp;63</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(instack,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(instack));<br /><span style="color: #008080; ">&nbsp;64</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;(nn&nbsp;&lt;&lt;&nbsp;1);&nbsp;i++)<br /><span style="color: #008080; ">&nbsp;65</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!dfn[i])&nbsp;dfs(i);<br /><span style="color: #008080; ">&nbsp;66</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;67</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;68</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;isOK()&nbsp;{<br /><span style="color: #008080; ">&nbsp;69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;nn;&nbsp;i++)<br /><span style="color: #008080; ">&nbsp;70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(belong[i]&nbsp;==&nbsp;belong[i+nn])&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br /><span style="color: #008080; ">&nbsp;71</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">&nbsp;72</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;73</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;74</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;build(<span style="color: #0000FF; ">double</span>&nbsp;limit)&nbsp;{<br /><span style="color: #008080; ">&nbsp;75</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;(nn&nbsp;&lt;&lt;&nbsp;1);&nbsp;i++)&nbsp;vec[i].clear();<br /><span style="color: #008080; ">&nbsp;76</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">&nbsp;77</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;a&nbsp;=&nbsp;i&nbsp;&lt;&lt;&nbsp;1,&nbsp;b&nbsp;=&nbsp;i&nbsp;&lt;&lt;&nbsp;1&nbsp;|&nbsp;1;<br /><span style="color: #008080; ">&nbsp;78</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vec[a].pb(b&nbsp;+&nbsp;nn),&nbsp;vec[b].pb(a&nbsp;+&nbsp;nn);<br /><span style="color: #008080; ">&nbsp;79</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vec[a+nn].pb(b),&nbsp;vec[b+nn].pb(a);<br /><span style="color: #008080; ">&nbsp;80</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;0;&nbsp;j&nbsp;&lt;&nbsp;i;&nbsp;j++)&nbsp;{<br /><span style="color: #008080; ">&nbsp;81</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;c&nbsp;=&nbsp;j&nbsp;&lt;&lt;&nbsp;1,&nbsp;d&nbsp;=&nbsp;j&nbsp;&lt;&lt;&nbsp;1&nbsp;|&nbsp;1;<br /><span style="color: #008080; ">&nbsp;82</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(getdist(p[a],&nbsp;p[c])&nbsp;+&nbsp;eps&nbsp;&lt;&nbsp;limit)&nbsp;{<br /><span style="color: #008080; ">&nbsp;83</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vec[a].pb(c+nn),&nbsp;vec[a].pb(d);<br /><span style="color: #008080; ">&nbsp;84</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vec[c].pb(a+nn),&nbsp;vec[c].pb(b);<br /><span style="color: #008080; ">&nbsp;85</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;86</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(getdist(p[a],&nbsp;p[d])&nbsp;+&nbsp;eps&nbsp;&lt;&nbsp;limit)&nbsp;{<br /><span style="color: #008080; ">&nbsp;87</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vec[a].pb(d+nn),&nbsp;vec[a].pb(c);<br /><span style="color: #008080; ">&nbsp;88</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vec[d].pb(a+nn),&nbsp;vec[d].pb(b);<br /><span style="color: #008080; ">&nbsp;89</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;90</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(getdist(p[b],&nbsp;p[c])&nbsp;+&nbsp;eps&nbsp;&lt;&nbsp;limit)&nbsp;{<br /><span style="color: #008080; ">&nbsp;91</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vec[b].pb(c+nn),&nbsp;vec[b].pb(d);<br /><span style="color: #008080; ">&nbsp;92</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vec[c].pb(b+nn),&nbsp;vec[c].pb(a);<br /><span style="color: #008080; ">&nbsp;93</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;94</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(getdist(p[b],&nbsp;p[d])&nbsp;+&nbsp;eps&nbsp;&lt;&nbsp;limit)&nbsp;{<br /><span style="color: #008080; ">&nbsp;95</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vec[b].pb(d+nn),&nbsp;vec[b].pb(c);<br /><span style="color: #008080; ">&nbsp;96</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vec[d].pb(b+nn),&nbsp;vec[d].pb(a);<br /><span style="color: #008080; ">&nbsp;97</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;98</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;99</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">100</span>&nbsp;}<br /><span style="color: #008080; ">101</span>&nbsp;<br /><span style="color: #008080; ">102</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;check(<span style="color: #0000FF; ">double</span>&nbsp;limit)&nbsp;{<br /><span style="color: #008080; ">103</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;build(limit);<br /><span style="color: #008080; ">104</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tarjan();<br /><span style="color: #008080; ">105</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;isOK();<br /><span style="color: #008080; ">106</span>&nbsp;}<br /><span style="color: #008080; ">107</span>&nbsp;<br /><span style="color: #008080; ">108</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;solve()&nbsp;{<br /><span style="color: #008080; ">109</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;l&nbsp;=&nbsp;0.0,&nbsp;r&nbsp;=&nbsp;1e6;<br /><span style="color: #008080; ">110</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;ans;<br /><span style="color: #008080; ">111</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(l&nbsp;+&nbsp;eps&nbsp;&lt;&nbsp;r)&nbsp;{<br /><span style="color: #008080; ">112</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;mid&nbsp;=&nbsp;(l&nbsp;+&nbsp;r)&nbsp;/&nbsp;2.0;<br /><span style="color: #008080; ">113</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(check(mid&nbsp;*&nbsp;2))&nbsp;ans&nbsp;=&nbsp;mid,&nbsp;l&nbsp;=&nbsp;mid;<br /><span style="color: #008080; ">114</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;r&nbsp;=&nbsp;mid;<br /><span style="color: #008080; ">115</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">116</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%.2f\n",&nbsp;ans);<br /><span style="color: #008080; ">117</span>&nbsp;}<br /><span style="color: #008080; ">118</span>&nbsp;<br /><span style="color: #008080; ">119</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br /><span style="color: #008080; ">120</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(~scanf("%d",&nbsp;&amp;n))&nbsp;{<br /><span style="color: #008080; ">121</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nn&nbsp;=&nbsp;n&nbsp;&lt;&lt;&nbsp;1;<br /><span style="color: #008080; ">122</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;nn;&nbsp;i++)&nbsp;scanf("%lf%lf",&nbsp;&amp;p[i].fi,&nbsp;&amp;p[i].se);<br /><span style="color: #008080; ">123</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;solve();<br /><span style="color: #008080; ">124</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">125</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">126</span>&nbsp;}<br /><span style="color: #008080; ">127</span>&nbsp;</div><img src ="http://www.cppblog.com/y346491470/aggbug/184474.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2012-07-21 13:47 <a href="http://www.cppblog.com/y346491470/articles/184474.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>uva 4263 Early-Morning Pickup - 两次dp预处理 + 费用流</title><link>http://www.cppblog.com/y346491470/articles/184317.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Fri, 20 Jul 2012 03:35:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/184317.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/184317.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/184317.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/184317.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/184317.html</trackback:ping><description><![CDATA[【题意】：给出一个无向图，边上的权值为通过这条边的时间。有四类点，分别代表客服的家，客服的办公室，客户的家和维修站，客服数量大于客户数量。现在要求对于每个客户都要有一个客服到达他的家然后再到达维修站，每个客服只能服务一个客户，最后所有的客服都要回到他们各自的办公室（有些客服是直接回办公室的）。问所有客服回到办公室的平均时间最少是多少。<br /><br />【题解】：先用floyd预处理点到点的最短路。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 然后设状态dp[i][j]表示第i个客服服务完第j个客户后回到自己的办公室的最短时间。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 因为题目要求的是平均时间最少，也就是总时间最少。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 可以想到用费用流模型：<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;源点s向每个客服连边，容量为1，费用为0；<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;每个客户向汇点t连边，容量为1，费用为0；<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;每个客服向每个客户连边，容量为1，费用为dp[i][j]；<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;增加一个虚拟结点x，表示有些客服是直接回办公室的。每个客服向s连边，容量为1，费用为每个人直接回办公室的时间。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;可以想到，最后有r - c个客服直接回办公室，所以x连边到汇点t，容量为r-c，费用为0.<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;最后求最小费用流即为答案。<br /><br />【代码】：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp; 1</span>&nbsp;#include&nbsp;"iostream"<br /><span style="color: #008080; ">&nbsp;&nbsp;2</span>&nbsp;#include&nbsp;"cstdio"<br /><span style="color: #008080; ">&nbsp;&nbsp;3</span>&nbsp;#include&nbsp;"cstring"<br /><span style="color: #008080; ">&nbsp;&nbsp;4</span>&nbsp;#include&nbsp;"algorithm"<br /><span style="color: #008080; ">&nbsp;&nbsp;5</span>&nbsp;#include&nbsp;"vector"<br /><span style="color: #008080; ">&nbsp;&nbsp;6</span>&nbsp;#include&nbsp;"queue"<br /><span style="color: #008080; ">&nbsp;&nbsp;7</span>&nbsp;#include&nbsp;"cmath"<br /><span style="color: #008080; ">&nbsp;&nbsp;8</span>&nbsp;#include&nbsp;"string"<br /><span style="color: #008080; ">&nbsp;&nbsp;9</span>&nbsp;#include&nbsp;"cctype"<br /><span style="color: #008080; ">&nbsp;10</span>&nbsp;#include&nbsp;"map"<br /><span style="color: #008080; ">&nbsp;11</span>&nbsp;#include&nbsp;"iomanip"<br /><span style="color: #008080; ">&nbsp;12</span>&nbsp;#include&nbsp;"set"<br /><span style="color: #008080; ">&nbsp;13</span>&nbsp;#include&nbsp;"utility"<br /><span style="color: #008080; ">&nbsp;14</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008080; ">&nbsp;15</span>&nbsp;typedef&nbsp;pair&lt;<span style="color: #0000FF; ">int</span>,&nbsp;<span style="color: #0000FF; ">int</span>&gt;&nbsp;pii;<br /><span style="color: #008080; ">&nbsp;16</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;pb&nbsp;push_back<br /><span style="color: #008080; ">&nbsp;17</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;mp&nbsp;make_pair<br /><span style="color: #008080; ">&nbsp;18</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;fi&nbsp;first<br /><span style="color: #008080; ">&nbsp;19</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;se&nbsp;second<br /><span style="color: #008080; ">&nbsp;20</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;sof(x)&nbsp;sizeof(x)<br /><span style="color: #008080; ">&nbsp;21</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1)<br /><span style="color: #008080; ">&nbsp;22</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;rc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1&nbsp;|&nbsp;1)<br /><span style="color: #008080; ">&nbsp;23</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lowbit(x)&nbsp;(x&nbsp;&amp;&nbsp;(-x))<br /><span style="color: #008080; ">&nbsp;24</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;ll&nbsp;long&nbsp;long<br /><span style="color: #008080; ">&nbsp;25</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxn&nbsp;550<br /><span style="color: #008080; ">&nbsp;26</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxm&nbsp;500000<br /><span style="color: #008080; ">&nbsp;27</span>&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;inf&nbsp;=&nbsp;1&nbsp;&lt;&lt;&nbsp;28;<br /><span style="color: #008080; ">&nbsp;28</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;maz[maxn][maxn];<br /><span style="color: #008080; ">&nbsp;29</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;dp[maxn][maxn];<br /><span style="color: #008080; ">&nbsp;30</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;rr[maxn],&nbsp;cc[maxn],&nbsp;mm[maxn];<br /><span style="color: #008080; ">&nbsp;31</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;office[maxn];<br /><span style="color: #008080; ">&nbsp;32</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n,&nbsp;m;<br /><span style="color: #008080; ">&nbsp;33</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;R,&nbsp;C,&nbsp;M;<br /><span style="color: #008080; ">&nbsp;34</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;ans,&nbsp;anscost,&nbsp;eh[maxn],&nbsp;tot,&nbsp;low[maxn],&nbsp;p[maxn],&nbsp;dist[maxn];&nbsp;<br /><span style="color: #008080; ">&nbsp;35</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;S,&nbsp;T;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">源，汇</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;36</span>&nbsp;<span style="color: #008000; "></span><span style="color: #0000FF; ">struct</span>&nbsp;Edge&nbsp;{<br /><span style="color: #008080; ">&nbsp;37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;v,&nbsp;cost,&nbsp;cap,&nbsp;flow,&nbsp;next;&nbsp;<br /><span style="color: #008080; ">&nbsp;38</span>&nbsp;}&nbsp;et[maxm];<br /><span style="color: #008080; ">&nbsp;39</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;visit[maxn];<br /><span style="color: #008080; ">&nbsp;40</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;41</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;spfa()&nbsp;{<br /><span style="color: #008080; ">&nbsp;42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;queue&lt;<span style="color: #0000FF; ">int</span>&gt;&nbsp;que;<br /><span style="color: #008080; ">&nbsp;43</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(visit,&nbsp;<span style="color: #0000FF; ">false</span>,&nbsp;<span style="color: #0000FF; ">sizeof</span>&nbsp;(visit));<br /><span style="color: #008080; ">&nbsp;44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(p,&nbsp;-1,&nbsp;<span style="color: #0000FF; ">sizeof</span>&nbsp;(p));<br /><span style="color: #008080; ">&nbsp;45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(low,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(low));<br /><span style="color: #008080; ">&nbsp;46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fill(&amp;dist[0],&nbsp;&amp;dist[maxn],&nbsp;inf);<br /><span style="color: #008080; ">&nbsp;47</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visit[S]&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>,&nbsp;low[S]&nbsp;=&nbsp;inf,&nbsp;dist[S]&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">&nbsp;48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;que.push(S);<br /><span style="color: #008080; ">&nbsp;49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(!que.empty())&nbsp;{<br /><span style="color: #008080; ">&nbsp;50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u&nbsp;=&nbsp;que.front();<br /><span style="color: #008080; ">&nbsp;51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;que.pop();<br /><span style="color: #008080; ">&nbsp;52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visit[u]&nbsp;=&nbsp;<span style="color: #0000FF; ">false</span>;<br /><span style="color: #008080; ">&nbsp;53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;eh[u];&nbsp;i&nbsp;!=&nbsp;-1;&nbsp;i&nbsp;=&nbsp;et[i].next)&nbsp;{<br /><span style="color: #008080; ">&nbsp;54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;v&nbsp;=&nbsp;et[i].v,&nbsp;cost&nbsp;=&nbsp;et[i].cost,&nbsp;cap&nbsp;=&nbsp;et[i].cap,&nbsp;flow&nbsp;=&nbsp;et[i].flow;<br /><span style="color: #008080; ">&nbsp;55</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(flow&nbsp;&lt;&nbsp;cap&nbsp;&amp;&amp;&nbsp;dist[u]&nbsp;+&nbsp;cost&nbsp;&lt;&nbsp;dist[v])&nbsp;{<br /><span style="color: #008080; ">&nbsp;56</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[v]&nbsp;=&nbsp;dist[u]&nbsp;+&nbsp;cost;<br /><span style="color: #008080; ">&nbsp;57</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[v]&nbsp;=&nbsp;i;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">注意，这里是&nbsp;i</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;58</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;low[v]&nbsp;=&nbsp;min(low[u],&nbsp;cap&nbsp;-&nbsp;flow);<br /><span style="color: #008080; ">&nbsp;59</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!visit[v])&nbsp;{<br /><span style="color: #008080; ">&nbsp;60</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visit[v]&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">&nbsp;61</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;que.push(v);<br /><span style="color: #008080; ">&nbsp;62</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;63</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;64</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;65</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;dist[T]&nbsp;!=&nbsp;inf;<br /><span style="color: #008080; ">&nbsp;67</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;68</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;69</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;costflow()&nbsp;{<br /><span style="color: #008080; ">&nbsp;70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;=&nbsp;0,&nbsp;anscost&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">&nbsp;71</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(spfa())&nbsp;{<br /><span style="color: #008080; ">&nbsp;72</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;x&nbsp;=&nbsp;p[T];<br /><span style="color: #008080; ">&nbsp;73</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;+=&nbsp;low[T];<br /><span style="color: #008080; ">&nbsp;74</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;anscost&nbsp;+=&nbsp;low[T]&nbsp;*&nbsp;dist[T];<br /><span style="color: #008080; ">&nbsp;75</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(x&nbsp;!=&nbsp;-1)&nbsp;{<br /><span style="color: #008080; ">&nbsp;76</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;et[x].flow&nbsp;+=&nbsp;low[T];<br /><span style="color: #008080; ">&nbsp;77</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;et[x^1].flow&nbsp;-=&nbsp;low[T];<br /><span style="color: #008080; ">&nbsp;78</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;et[x^1].cost&nbsp;=&nbsp;-et[x].cost;<br /><span style="color: #008080; ">&nbsp;79</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;=&nbsp;p[et[x].u];<br /><span style="color: #008080; ">&nbsp;80</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;81</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;82</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;83</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;84</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;add(<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;v,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cost,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cap,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;flow)&nbsp;{<br /><span style="color: #008080; ">&nbsp;85</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Edge&nbsp;e&nbsp;=&nbsp;{u,&nbsp;v,&nbsp;cost,&nbsp;cap,&nbsp;flow,&nbsp;eh[u]};<br /><span style="color: #008080; ">&nbsp;86</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;et[tot]&nbsp;=&nbsp;e;<br /><span style="color: #008080; ">&nbsp;87</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eh[u]&nbsp;=&nbsp;tot++;<br /><span style="color: #008080; ">&nbsp;88</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;89</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;90</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;addedge(<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;v,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cost,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cap)&nbsp;{<br /><span style="color: #008080; ">&nbsp;91</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add(u,&nbsp;v,&nbsp;cost,&nbsp;cap,&nbsp;0),&nbsp;add(v,&nbsp;u,&nbsp;-cost,&nbsp;0,&nbsp;0);<br /><span style="color: #008080; ">&nbsp;92</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;93</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;94</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;init()&nbsp;{<br /><span style="color: #008080; ">&nbsp;95</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tot&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">&nbsp;96</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(eh,&nbsp;-1,&nbsp;<span style="color: #0000FF; ">sizeof</span>&nbsp;(eh));<br /><span style="color: #008080; ">&nbsp;97</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;98</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;99</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;floyd()&nbsp;{<br /><span style="color: #008080; ">100</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;k&nbsp;=&nbsp;1;&nbsp;k&nbsp;&lt;=&nbsp;n;&nbsp;k++)&nbsp;<br /><span style="color: #008080; ">101</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)<br /><span style="color: #008080; ">102</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;1;&nbsp;j&nbsp;&lt;=&nbsp;n;&nbsp;j++)<br /><span style="color: #008080; ">103</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maz[i][j]&nbsp;=&nbsp;min(maz[i][j],&nbsp;maz[i][k]&nbsp;+&nbsp;maz[k][j]);<br /><span style="color: #008080; ">104</span>&nbsp;}<br /><span style="color: #008080; ">105</span>&nbsp;<br /><span style="color: #008080; ">106</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;solve()&nbsp;{<br /><span style="color: #008080; ">107</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();<br /><span style="color: #008080; ">108</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;floyd();<br /><span style="color: #008080; ">109</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;X&nbsp;=&nbsp;R&nbsp;+&nbsp;C&nbsp;+&nbsp;1;<br /><span style="color: #008080; ">110</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S&nbsp;=&nbsp;0,&nbsp;T&nbsp;=&nbsp;X&nbsp;+&nbsp;1;<br /><span style="color: #008080; ">111</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;R;&nbsp;i++)&nbsp;addedge(S,&nbsp;i,&nbsp;0,&nbsp;1);<br /><span style="color: #008080; ">112</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;C;&nbsp;i++)&nbsp;addedge(R&nbsp;+&nbsp;i,&nbsp;T,&nbsp;0,&nbsp;1);<br /><span style="color: #008080; ">113</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addedge(X,&nbsp;T,&nbsp;0,&nbsp;R&nbsp;-&nbsp;C);<br /><span style="color: #008080; ">114</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;R;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">115</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;1;&nbsp;j&nbsp;&lt;=&nbsp;C;&nbsp;j++)&nbsp;{<br /><span style="color: #008080; ">116</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;k&nbsp;=&nbsp;1;&nbsp;k&nbsp;&lt;=&nbsp;M;&nbsp;k++)<br /><span style="color: #008080; ">117</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dp[i][j]&nbsp;=&nbsp;min(dp[i][j],&nbsp;maz[rr[i]][cc[j]]&nbsp;+&nbsp;maz[cc[j]][mm[k]]&nbsp;+&nbsp;maz[mm[k]][office[i]]);<br /><span style="color: #008080; ">118</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(dp[i][j]&nbsp;&lt;&nbsp;inf)&nbsp;addedge(i,&nbsp;j&nbsp;+&nbsp;R,&nbsp;dp[i][j],&nbsp;1);<br /><span style="color: #008080; ">119</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">120</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addedge(i,&nbsp;X,&nbsp;maz[rr[i]][office[i]],&nbsp;1);<br /><span style="color: #008080; ">121</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">122</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;costflow();<br /><span style="color: #008080; ">123</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;average&nbsp;=&nbsp;1.0&nbsp;*&nbsp;anscost&nbsp;/&nbsp;R;<br /><span style="color: #008080; ">124</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;average&nbsp;=&nbsp;ceil(average);<br /><span style="color: #008080; ">125</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;aver&nbsp;=&nbsp;(<span style="color: #0000FF; ">int</span>)average;<br /><span style="color: #008080; ">126</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;hh&nbsp;=&nbsp;8&nbsp;+&nbsp;aver&nbsp;/&nbsp;60;<br /><span style="color: #008080; ">127</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;mins&nbsp;=&nbsp;aver&nbsp;%&nbsp;60;<br /><span style="color: #008080; ">128</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%02d:%02d\n",&nbsp;hh,&nbsp;mins);<br /><span style="color: #008080; ">129</span>&nbsp;<br /><span style="color: #008080; ">130</span>&nbsp;}<br /><span style="color: #008080; ">131</span>&nbsp;<br /><span style="color: #008080; ">132</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br /><span style="color: #008080; ">133</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;T;<br /><span style="color: #008080; ">134</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&amp;T);<br /><span style="color: #008080; ">135</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(T--)&nbsp;{<br /><span style="color: #008080; ">136</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d",&nbsp;&amp;n,&nbsp;&amp;m);<br /><span style="color: #008080; ">137</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">138</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;1;&nbsp;j&nbsp;&lt;=&nbsp;n;&nbsp;j++)&nbsp;{<br /><span style="color: #008080; ">139</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maz[i][j]&nbsp;=&nbsp;inf;<br /><span style="color: #008080; ">140</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dp[i][j]&nbsp;=&nbsp;inf;<br /><span style="color: #008080; ">141</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">142</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maz[i][i]&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">143</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">144</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;m;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">145</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;a,&nbsp;b,&nbsp;c;<br /><span style="color: #008080; ">146</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d%d",&nbsp;&amp;a,&nbsp;&amp;b,&nbsp;&amp;c);<br /><span style="color: #008080; ">147</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maz[a][b]&nbsp;=&nbsp;maz[b][a]&nbsp;=&nbsp;c;<br /><span style="color: #008080; ">148</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">149</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&amp;R);<br /><span style="color: #008080; ">150</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;R;&nbsp;i++)&nbsp;scanf("%d%d",&nbsp;&amp;rr[i],&nbsp;&amp;office[i]);<br /><span style="color: #008080; ">151</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&amp;C);<br /><span style="color: #008080; ">152</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;C;&nbsp;i++)&nbsp;scanf("%d",&nbsp;&amp;cc[i]);<br /><span style="color: #008080; ">153</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&amp;M);<br /><span style="color: #008080; ">154</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;M;&nbsp;i++)&nbsp;scanf("%d",&nbsp;&amp;mm[i]);<br /><span style="color: #008080; ">155</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;solve();<br /><span style="color: #008080; ">156</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">157</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">158</span>&nbsp;}<br /><span style="color: #008080; ">159</span>&nbsp;</div><img src ="http://www.cppblog.com/y346491470/aggbug/184317.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2012-07-20 11:35 <a href="http://www.cppblog.com/y346491470/articles/184317.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hdoj 4253 Two Famous Companies - 二分 + 最小生成树</title><link>http://www.cppblog.com/y346491470/articles/183979.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Tue, 17 Jul 2012 17:36:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/183979.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/183979.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/183979.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/183979.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/183979.html</trackback:ping><description><![CDATA[【题意】：给出n个点，m条边，边分为两种，一种是A公司的，一种是B公司的。边上有权值，问用n-1条边把n个点连起来的最小费用是多少，其中A公司的边刚好有k条。题目保证有解。<br /><br />【题解】：很明显看到是求一颗最小生成树，不过有一个限制就是刚刚好有k条边是A公司的。想了很久不会做，看别人代码的。二分出一个最大值delta使得A公司的边加上这个值后再求MST时A公司的边有大于等于k条，然后答案就是cost of MST - k * delta。思想其实是加上一个delta值去逼近答案，最后可以求出这样的MST，如果最后求出的MST的A公司的边多于k条，一定存在与A公司等效且等价的B公司边，替换过来即可。<br /><br />【代码】：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;#include&nbsp;"iostream"<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;#include&nbsp;"cstdio"<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;#include&nbsp;"cstring"<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;#include&nbsp;"algorithm"<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;#include&nbsp;"vector"<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;#include&nbsp;"queue"<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;#include&nbsp;"cmath"<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;#include&nbsp;"string"<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;#include&nbsp;"cctype"<br /><span style="color: #008080; ">10</span>&nbsp;#include&nbsp;"map"<br /><span style="color: #008080; ">11</span>&nbsp;#include&nbsp;"iomanip"<br /><span style="color: #008080; ">12</span>&nbsp;#include&nbsp;"set"<br /><span style="color: #008080; ">13</span>&nbsp;#include&nbsp;"utility"<br /><span style="color: #008080; ">14</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008080; ">15</span>&nbsp;typedef&nbsp;pair&lt;<span style="color: #0000FF; ">int</span>,&nbsp;<span style="color: #0000FF; ">int</span>&gt;&nbsp;pii;<br /><span style="color: #008080; ">16</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;pb&nbsp;push_back<br /><span style="color: #008080; ">17</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;mp&nbsp;make_pair<br /><span style="color: #008080; ">18</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;fi&nbsp;first<br /><span style="color: #008080; ">19</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;se&nbsp;second<br /><span style="color: #008080; ">20</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;sof(x)&nbsp;sizeof(x)<br /><span style="color: #008080; ">21</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1)<br /><span style="color: #008080; ">22</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;rc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1&nbsp;|&nbsp;1)<br /><span style="color: #008080; ">23</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lowbit(x)&nbsp;(x&nbsp;&amp;&nbsp;(-x))<br /><span style="color: #008080; ">24</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;ll&nbsp;long&nbsp;long<br /><span style="color: #008080; ">25</span>&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;Edge&nbsp;{<br /><span style="color: #008080; ">26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;v,&nbsp;w,&nbsp;id;<br /><span style="color: #008080; ">27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Edge(){}<br /><span style="color: #008080; ">28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Edge(<span style="color: #0000FF; ">int</span>&nbsp;_u,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;_v,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;_w,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;_id)&nbsp;{<br /><span style="color: #008080; ">29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u&nbsp;=&nbsp;_u,&nbsp;v&nbsp;=&nbsp;_v,&nbsp;w&nbsp;=&nbsp;_w,&nbsp;id&nbsp;=&nbsp;_id;<br /><span style="color: #008080; ">30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;<span style="color: #0000FF; ">operator</span>&lt;(<span style="color: #0000FF; ">const</span>&nbsp;Edge&nbsp;&amp;x)&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;{<br /><span style="color: #008080; ">32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(w&nbsp;!=&nbsp;x.w)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;w&nbsp;&lt;&nbsp;x.w;<br /><span style="color: #008080; ">33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;id&nbsp;&lt;&nbsp;x.id;<br /><span style="color: #008080; ">34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">35</span>&nbsp;}et[2][100050],&nbsp;e;<br /><span style="color: #008080; ">36</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;tot,&nbsp;tot1;<br /><span style="color: #008080; ">37</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n,&nbsp;m,&nbsp;k,&nbsp;cost;<br /><span style="color: #008080; ">38</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;fa[50050];<br /><span style="color: #008080; ">39</span>&nbsp;<br /><span style="color: #008080; ">40</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;find(<span style="color: #0000FF; ">int</span>&nbsp;x)&nbsp;{<br /><span style="color: #008080; ">41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(x&nbsp;==&nbsp;fa[x])&nbsp;?&nbsp;x&nbsp;:&nbsp;fa[x]&nbsp;=&nbsp;find(fa[x]);<br /><span style="color: #008080; ">42</span>&nbsp;}<br /><span style="color: #008080; ">43</span>&nbsp;<br /><span style="color: #008080; ">44</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;merge(<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;v)&nbsp;{<br /><span style="color: #008080; ">45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u&nbsp;=&nbsp;find(fa[u]),&nbsp;v&nbsp;=&nbsp;find(fa[v]);<br /><span style="color: #008080; ">46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(u&nbsp;!=&nbsp;v)&nbsp;{<br /><span style="color: #008080; ">47</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fa[u]&nbsp;=&nbsp;v;<br /><span style="color: #008080; ">48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br /><span style="color: #008080; ">50</span>&nbsp;}<br /><span style="color: #008080; ">51</span>&nbsp;<br /><span style="color: #008080; ">52</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;check(<span style="color: #0000FF; ">int</span>&nbsp;w)&nbsp;{<br /><span style="color: #008080; ">53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cost&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cnt&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">55</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)&nbsp;fa[i]&nbsp;=&nbsp;i;<br /><span style="color: #008080; ">56</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0,&nbsp;j&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">57</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(i&nbsp;&lt;&nbsp;tot&nbsp;||&nbsp;j&nbsp;&lt;&nbsp;tot1)&nbsp;{<br /><span style="color: #008080; ">58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(et[0][i].w&nbsp;+&nbsp;w&nbsp;&lt;=&nbsp;et[1][j].w)&nbsp;{<br /><span style="color: #008080; ">59</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e&nbsp;=&nbsp;et[0][i++];<br /><span style="color: #008080; ">60</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.w&nbsp;+=&nbsp;w;<br /><span style="color: #008080; ">61</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;e&nbsp;=&nbsp;et[1][j++];<br /><span style="color: #008080; ">62</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(merge(e.u,&nbsp;e.v))&nbsp;{<br /><span style="color: #008080; ">63</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!e.id)&nbsp;cnt++;<br /><span style="color: #008080; ">64</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cost&nbsp;+=&nbsp;e.w;<br /><span style="color: #008080; ">65</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;cnt&nbsp;&gt;=&nbsp;k;<br /><span style="color: #008080; ">68</span>&nbsp;}<br /><span style="color: #008080; ">69</span>&nbsp;<br /><span style="color: #008080; ">70</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br /><span style="color: #008080; ">71</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;Case&nbsp;=&nbsp;1;<br /><span style="color: #008080; ">72</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(~scanf("%d%d%d",&nbsp;&amp;n,&nbsp;&amp;m,&nbsp;&amp;k))&nbsp;{<br /><span style="color: #008080; ">73</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tot&nbsp;=&nbsp;tot1&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">74</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;m;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">75</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;v,&nbsp;w,&nbsp;id;<br /><span style="color: #008080; ">76</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d%d%d",&nbsp;&amp;u,&nbsp;&amp;v,&nbsp;&amp;w,&nbsp;&amp;id);<br /><span style="color: #008080; ">77</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(id)&nbsp;et[1][tot1++]&nbsp;=&nbsp;Edge(u,&nbsp;v,&nbsp;w,&nbsp;id);<br /><span style="color: #008080; ">78</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;et[0][tot++]&nbsp;=&nbsp;Edge(u,&nbsp;v,&nbsp;w,&nbsp;id);<br /><span style="color: #008080; ">79</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">80</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sort(et[0],&nbsp;et[0]&nbsp;+&nbsp;tot);<br /><span style="color: #008080; ">81</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sort(et[1],&nbsp;et[1]&nbsp;+&nbsp;tot1);<br /><span style="color: #008080; ">82</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;et[0][tot].w&nbsp;=&nbsp;et[1][tot1].w&nbsp;=&nbsp;1&nbsp;&lt;&lt;&nbsp;30;<br /><span style="color: #008080; ">83</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;l&nbsp;=&nbsp;-100,&nbsp;r&nbsp;=&nbsp;100;<br /><span style="color: #008080; ">84</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;w;<br /><span style="color: #008080; ">85</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(l&nbsp;&lt;=&nbsp;r)&nbsp;{<br /><span style="color: #008080; ">86</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;mid&nbsp;=&nbsp;(l&nbsp;+&nbsp;r)&nbsp;/&nbsp;2;<br /><span style="color: #008080; ">87</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(check(mid))&nbsp;w&nbsp;=&nbsp;mid,&nbsp;l&nbsp;=&nbsp;mid&nbsp;+&nbsp;1;<br /><span style="color: #008080; ">88</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;r&nbsp;=&nbsp;mid&nbsp;-&nbsp;1;<br /><span style="color: #008080; ">89</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">90</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;check(w);<br /><span style="color: #008080; ">91</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("Case&nbsp;%d:&nbsp;%d\n",&nbsp;Case++,&nbsp;cost&nbsp;-&nbsp;w&nbsp;*&nbsp;k);&nbsp;<br /><span style="color: #008080; ">92</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">93</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">94</span>&nbsp;}<br /><span style="color: #008080; ">95</span>&nbsp;</div><img src ="http://www.cppblog.com/y346491470/aggbug/183979.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2012-07-18 01:36 <a href="http://www.cppblog.com/y346491470/articles/183979.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>zoj 2364 Data Transmission - 分层图阻塞流 + 贪心初始流</title><link>http://www.cppblog.com/y346491470/articles/182464.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Mon, 09 Jul 2012 13:51:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/182464.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/182464.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/182464.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/182464.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/182464.html</trackback:ping><description><![CDATA[【题意】：给出一个分层图，求其阻塞流。<br /><br />【题解】：在zoj的一场月赛看到这题，于是为了这个题学了dinic，发现裸的dinic还是TLe，要加上贪心初始流才能过。<br /><br />【代码】：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp; 1</span>&nbsp;#include&nbsp;"iostream"<br /><span style="color: #008080; ">&nbsp;&nbsp;2</span>&nbsp;#include&nbsp;"cstdio"<br /><span style="color: #008080; ">&nbsp;&nbsp;3</span>&nbsp;#include&nbsp;"cstring"<br /><span style="color: #008080; ">&nbsp;&nbsp;4</span>&nbsp;#include&nbsp;"algorithm"<br /><span style="color: #008080; ">&nbsp;&nbsp;5</span>&nbsp;#include&nbsp;"vector"<br /><span style="color: #008080; ">&nbsp;&nbsp;6</span>&nbsp;#include&nbsp;"queue"<br /><span style="color: #008080; ">&nbsp;&nbsp;7</span>&nbsp;#include&nbsp;"cmath"<br /><span style="color: #008080; ">&nbsp;&nbsp;8</span>&nbsp;#include&nbsp;"string"<br /><span style="color: #008080; ">&nbsp;&nbsp;9</span>&nbsp;#include&nbsp;"cctype"<br /><span style="color: #008080; ">&nbsp;10</span>&nbsp;#include&nbsp;"map"<br /><span style="color: #008080; ">&nbsp;11</span>&nbsp;#include&nbsp;"iomanip"<br /><span style="color: #008080; ">&nbsp;12</span>&nbsp;#include&nbsp;"set"<br /><span style="color: #008080; ">&nbsp;13</span>&nbsp;#include&nbsp;"utility"<br /><span style="color: #008080; ">&nbsp;14</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008080; ">&nbsp;15</span>&nbsp;typedef&nbsp;pair&lt;<span style="color: #0000FF; ">int</span>,&nbsp;<span style="color: #0000FF; ">int</span>&gt;&nbsp;pii;<br /><span style="color: #008080; ">&nbsp;16</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;pb&nbsp;push_back<br /><span style="color: #008080; ">&nbsp;17</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;mp&nbsp;make_pair<br /><span style="color: #008080; ">&nbsp;18</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;fi&nbsp;first<br /><span style="color: #008080; ">&nbsp;19</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;se&nbsp;second<br /><span style="color: #008080; ">&nbsp;20</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;sof(x)&nbsp;sizeof(x)<br /><span style="color: #008080; ">&nbsp;21</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1)<br /><span style="color: #008080; ">&nbsp;22</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;rc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1&nbsp;|&nbsp;1)<br /><span style="color: #008080; ">&nbsp;23</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lowbit(x)&nbsp;(x&nbsp;&amp;&nbsp;(-x))<br /><span style="color: #008080; ">&nbsp;24</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;ll&nbsp;long&nbsp;long<br /><span style="color: #008080; ">&nbsp;25</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxn&nbsp;1550<br /><span style="color: #008080; ">&nbsp;26</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxm&nbsp;1000000<br /><span style="color: #008080; ">&nbsp;27</span>&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;inf&nbsp;=&nbsp;1&nbsp;&lt;&lt;&nbsp;30;<br /><span style="color: #008080; ">&nbsp;28</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n,&nbsp;m,&nbsp;s,&nbsp;t,&nbsp;l;<br /><span style="color: #008080; ">&nbsp;29</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;eh[maxn],&nbsp;low[maxn],&nbsp;dist[maxn],&nbsp;pre[maxn],&nbsp;cur[maxn],&nbsp;tot,&nbsp;cnt[maxn];<br /><span style="color: #008080; ">&nbsp;30</span>&nbsp;pii&nbsp;p[maxn];<br /><span style="color: #008080; ">&nbsp;31</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;<span style="color: #0000FF; ">in</span>[maxn],&nbsp;<span style="color: #0000FF; ">out</span>[maxn];<br /><span style="color: #008080; ">&nbsp;32</span>&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;Edge&nbsp;{<br /><span style="color: #008080; ">&nbsp;33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;v,&nbsp;cap,&nbsp;flow,&nbsp;next;<br /><span style="color: #008080; ">&nbsp;34</span>&nbsp;}et[maxm];<br /><span style="color: #008080; ">&nbsp;35</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;init()&nbsp;{<br /><span style="color: #008080; ">&nbsp;36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tot&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">&nbsp;37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(eh,&nbsp;-1,&nbsp;<span style="color: #0000FF; ">sizeof</span>(eh));<br /><span style="color: #008080; ">&nbsp;38</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;39</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;add(<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;v,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cap,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;flow)&nbsp;{<br /><span style="color: #008080; ">&nbsp;40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Edge&nbsp;e&nbsp;=&nbsp;{u,&nbsp;v,&nbsp;cap,&nbsp;flow,&nbsp;eh[u]};<br /><span style="color: #008080; ">&nbsp;41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;et[tot]&nbsp;=&nbsp;e;<br /><span style="color: #008080; ">&nbsp;42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eh[u]&nbsp;=&nbsp;tot++;<br /><span style="color: #008080; ">&nbsp;43</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;44</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;addedge(<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;v,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cap)&nbsp;{<br /><span style="color: #008080; ">&nbsp;45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add(u,&nbsp;v,&nbsp;cap,&nbsp;0),&nbsp;add(v,&nbsp;u,&nbsp;0,&nbsp;0);<br /><span style="color: #008080; ">&nbsp;46</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;47</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;isap(<span style="color: #0000FF; ">int</span>&nbsp;s,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;t,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n){<br /><span style="color: #008080; ">&nbsp;48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;v,&nbsp;now,&nbsp;flow&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">&nbsp;49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(dist,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(dist));&nbsp;<br /><span style="color: #008080; ">&nbsp;50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(low,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(low));<br /><span style="color: #008080; ">&nbsp;51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(cnt,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(cnt));<br /><span style="color: #008080; ">&nbsp;52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(u&nbsp;=&nbsp;0&nbsp;;&nbsp;u&nbsp;&lt;=&nbsp;n&nbsp;;&nbsp;u&nbsp;++)&nbsp;cur[u]&nbsp;=&nbsp;eh[u];<br /><span style="color: #008080; ">&nbsp;53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;low[s]&nbsp;=&nbsp;inf,&nbsp;cnt[0]&nbsp;=&nbsp;n,&nbsp;u&nbsp;=&nbsp;s;<br /><span style="color: #008080; ">&nbsp;54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(dist[s]&nbsp;&lt;&nbsp;n)&nbsp;{<br /><span style="color: #008080; ">&nbsp;55</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(now&nbsp;=&nbsp;cur[u];&nbsp;now&nbsp;!=&nbsp;-1;&nbsp;now&nbsp;=&nbsp;et[now].next)<br /><span style="color: #008080; ">&nbsp;56</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(et[now].cap&nbsp;-&nbsp;et[now].flow&nbsp;&amp;&amp;&nbsp;dist[u]&nbsp;==&nbsp;dist[&nbsp;v&nbsp;=&nbsp;et[now].v&nbsp;]&nbsp;+&nbsp;1&nbsp;)&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">&nbsp;57</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(now&nbsp;!=&nbsp;-1)&nbsp;{<br /><span style="color: #008080; ">&nbsp;58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cur[u]&nbsp;=&nbsp;pre[v]&nbsp;=&nbsp;now;<br /><span style="color: #008080; ">&nbsp;59</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;low[v]&nbsp;=&nbsp;min(et[now].cap&nbsp;-&nbsp;et[now].flow,&nbsp;low[u]);<br /><span style="color: #008080; ">&nbsp;60</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u&nbsp;=&nbsp;v;<br /><span style="color: #008080; ">&nbsp;61</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(u&nbsp;==&nbsp;t)&nbsp;{<br /><span style="color: #008080; ">&nbsp;62</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(;&nbsp;u&nbsp;!=&nbsp;s;&nbsp;u&nbsp;=&nbsp;et[pre[u]].u){<br /><span style="color: #008080; ">&nbsp;63</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;et[pre[u]].flow&nbsp;+=&nbsp;low[t];<br /><span style="color: #008080; ">&nbsp;64</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;et[pre[u]^1].flow&nbsp;-=&nbsp;low[t];<br /><span style="color: #008080; ">&nbsp;65</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flow&nbsp;+=&nbsp;low[t];&nbsp;low[s]&nbsp;=&nbsp;inf;<br /><span style="color: #008080; ">&nbsp;67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;68</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br /><span style="color: #008080; ">&nbsp;69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(--cnt[dist[u]]&nbsp;==&nbsp;0)&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">&nbsp;70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[u]&nbsp;=&nbsp;n,&nbsp;cur[u]&nbsp;=&nbsp;eh[u];<br /><span style="color: #008080; ">&nbsp;71</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(now&nbsp;=&nbsp;eh[u];&nbsp;now&nbsp;!=&nbsp;-1;&nbsp;now&nbsp;=&nbsp;et[now].next)<br /><span style="color: #008080; ">&nbsp;72</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(et[now].cap&nbsp;-&nbsp;et[now].flow&nbsp;&amp;&amp;&nbsp;dist[u]&nbsp;&gt;&nbsp;dist[et[now].v]&nbsp;+&nbsp;1)<br /><span style="color: #008080; ">&nbsp;73</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[u]&nbsp;=&nbsp;dist[&nbsp;et[now].v&nbsp;]&nbsp;+&nbsp;1;<br /><span style="color: #008080; ">&nbsp;74</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnt[dist[u]]++;<br /><span style="color: #008080; ">&nbsp;75</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(u&nbsp;!=&nbsp;s)&nbsp;u&nbsp;=&nbsp;et[pre[u]].u;<br /><span style="color: #008080; ">&nbsp;76</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;77</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;78</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;flow;<br /><span style="color: #008080; ">&nbsp;79</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;80</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;81</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;greedy()&nbsp;{<span style="color: #008000; ">//</span><span style="color: #008000; ">贪心初始流</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;82</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;memset(<span style="color: #0000FF; ">in</span>,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(<span style="color: #0000FF; ">in</span>));<br /><span style="color: #008080; ">&nbsp;83</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(<span style="color: #0000FF; ">out</span>,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(<span style="color: #0000FF; ">out</span>));<br /><span style="color: #008080; ">&nbsp;84</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">in</span>[s]&nbsp;=&nbsp;inf;<br /><span style="color: #008080; ">&nbsp;85</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sort(p&nbsp;+&nbsp;1,&nbsp;p&nbsp;+&nbsp;1&nbsp;+&nbsp;n);<br /><span style="color: #008080; ">&nbsp;86</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">&nbsp;87</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;eh[p[i].se];&nbsp;j&nbsp;!=&nbsp;-1;&nbsp;j&nbsp;=&nbsp;et[j].next)&nbsp;{<br /><span style="color: #008080; ">&nbsp;88</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(et[j].cap&nbsp;&gt;&nbsp;0)&nbsp;{<br /><span style="color: #008080; ">&nbsp;89</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;dd&nbsp;=&nbsp;min(et[j].cap,&nbsp;<span style="color: #0000FF; ">in</span>[p[i].se]&nbsp;-&nbsp;<span style="color: #0000FF; ">out</span>[p[i].se]);<br /><span style="color: #008080; ">&nbsp;90</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">out</span>[p[i].se]&nbsp;+=&nbsp;dd;<br /><span style="color: #008080; ">&nbsp;91</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">in</span>[et[j].v]&nbsp;+=&nbsp;dd;<br /><span style="color: #008080; ">&nbsp;92</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;93</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;94</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;95</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(<span style="color: #0000FF; ">in</span>,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(<span style="color: #0000FF; ">in</span>));<br /><span style="color: #008080; ">&nbsp;96</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">in</span>[t]&nbsp;=&nbsp;inf;<br /><span style="color: #008080; ">&nbsp;97</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;n;&nbsp;i&nbsp;&gt;=&nbsp;1;&nbsp;i--)&nbsp;{<br /><span style="color: #008080; ">&nbsp;98</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;eh[p[i].se];&nbsp;j&nbsp;!=&nbsp;-1;&nbsp;j&nbsp;=&nbsp;et[j].next)&nbsp;{<br /><span style="color: #008080; ">&nbsp;99</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(et[j].cap&nbsp;==&nbsp;0)&nbsp;{<br /><span style="color: #008080; ">100</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;k&nbsp;=&nbsp;j&nbsp;^&nbsp;1;<br /><span style="color: #008080; ">101</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u&nbsp;=&nbsp;et[k].u,&nbsp;v&nbsp;=&nbsp;et[k].v;<br /><span style="color: #008080; ">102</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(<span style="color: #0000FF; ">out</span>[u]&nbsp;&gt;&nbsp;<span style="color: #0000FF; ">in</span>[u])&nbsp;{<br /><span style="color: #008080; ">103</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;dd&nbsp;=&nbsp;min(<span style="color: #0000FF; ">out</span>[u]&nbsp;-&nbsp;<span style="color: #0000FF; ">in</span>[u],&nbsp;et[k].cap);<br /><span style="color: #008080; ">104</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dd&nbsp;=&nbsp;min(dd,&nbsp;<span style="color: #0000FF; ">in</span>[v]);<br /><span style="color: #008080; ">105</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">in</span>[u]&nbsp;+=&nbsp;dd;<br /><span style="color: #008080; ">106</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">in</span>[v]&nbsp;-=&nbsp;dd;<br /><span style="color: #008080; ">107</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;et[k].flow&nbsp;+=&nbsp;dd;<br /><span style="color: #008080; ">108</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">109</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">110</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">111</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">112</span>&nbsp;}<br /><span style="color: #008080; ">113</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br /><span style="color: #008080; ">114</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;T,&nbsp;u,&nbsp;v,&nbsp;w,&nbsp;level;<br /><span style="color: #008080; ">115</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&amp;T);<br /><span style="color: #008080; ">116</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(T--)&nbsp;{<br /><span style="color: #008080; ">117</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d%d",&nbsp;&amp;n,&nbsp;&amp;m,&nbsp;&amp;l);<br /><span style="color: #008080; ">118</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();<br /><span style="color: #008080; ">119</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">120</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&amp;level);<br /><span style="color: #008080; ">121</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[i]&nbsp;=&nbsp;mp(level,&nbsp;i);<br /><span style="color: #008080; ">122</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(level&nbsp;==&nbsp;1)&nbsp;s&nbsp;=&nbsp;i;<br /><span style="color: #008080; ">123</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>(level&nbsp;==&nbsp;l)&nbsp;t&nbsp;=&nbsp;i;<br /><span style="color: #008080; ">124</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">125</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;m;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">126</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d%d",&nbsp;&amp;u,&nbsp;&amp;v,&nbsp;&amp;w);<br /><span style="color: #008080; ">127</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addedge(u,&nbsp;v,&nbsp;w);<br /><span style="color: #008080; ">128</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">129</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;greedy();<br /><span style="color: #008080; ">130</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isap(s,&nbsp;t,&nbsp;n);<br /><span style="color: #008080; ">131</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;m;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">132</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",&nbsp;et[i&lt;&lt;1].flow);<br /><span style="color: #008080; ">133</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">134</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">135</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">136</span>&nbsp;}<br /><span style="color: #008080; ">137</span>&nbsp;</div><img src ="http://www.cppblog.com/y346491470/aggbug/182464.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2012-07-09 21:51 <a href="http://www.cppblog.com/y346491470/articles/182464.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>zoj 3509 Island Communication - 保留最小生成森林</title><link>http://www.cppblog.com/y346491470/articles/174937.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Tue, 15 May 2012 01:03:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/174937.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/174937.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/174937.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/174937.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/174937.html</trackback:ping><description><![CDATA[【题意】：<span>有n个岛，初始没有桥，每次可以在i和j间建一座桥，拆一座桥，或查询i和j是否联通，</span>i和j之间最多只会建一次桥。<span>点数n=500，操作数m=50000。<br /><br /></span>【题解】：<span>由于点数只有500，其实这题不需要任何高级的数据结构就有一个O(n*m)的算法。注意到点数很少，而要求i和j是否联通，我们只要保留这幅图的生成森林就足够了，即控制边的个数为O(n)。对于查询操作，直接dfs一次即可。对于加边操作，如果i和j不联通，那么直接加上这条边就好了。否则，加上这条边后一定形成一个圈，如果我们把这个圈中最早被删去的边提前删掉，是不会影响后面操作的结果的，所以我们删掉这条边，以保证图中始终没有圈。对于删边操作，如果这个边已经被提前删掉了，那么什么也不做，否则简单删掉就好了。要知道哪条边先被删掉，可以先读入所有操作，预处理之。对于每次操作，复杂度均为O(n)，总的复杂度O(n*m)。<br /><br />【代码】：<br /></span><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;#include&nbsp;"iostream"<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;#include&nbsp;"cstdio"<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;#include&nbsp;"cstring"<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;#include&nbsp;"algorithm"<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;#include&nbsp;"vector"<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;#include&nbsp;"queue"<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;#include&nbsp;"cmath"<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;#include&nbsp;"string"<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;#include&nbsp;"cctype"<br /><span style="color: #008080; ">10</span>&nbsp;#include&nbsp;"map"<br /><span style="color: #008080; ">11</span>&nbsp;#include&nbsp;"iomanip"<br /><span style="color: #008080; ">12</span>&nbsp;#include&nbsp;"set"<br /><span style="color: #008080; ">13</span>&nbsp;#include&nbsp;"utility"<br /><span style="color: #008080; ">14</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008080; ">15</span>&nbsp;typedef&nbsp;pair&lt;<span style="color: #0000FF; ">int</span>,&nbsp;<span style="color: #0000FF; ">int</span>&gt;&nbsp;pii;<br /><span style="color: #008080; ">16</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;pb&nbsp;push_back<br /><span style="color: #008080; ">17</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;mp&nbsp;make_pair<br /><span style="color: #008080; ">18</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;fi&nbsp;first<br /><span style="color: #008080; ">19</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;se&nbsp;second<br /><span style="color: #008080; ">20</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;sof(x)&nbsp;sizeof(x)<br /><span style="color: #008080; ">21</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1)<br /><span style="color: #008080; ">22</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;rc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1&nbsp;|&nbsp;1)<br /><span style="color: #008080; ">23</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lowbit(x)&nbsp;(x&nbsp;&amp;&nbsp;(-x))<br /><span style="color: #008080; ">24</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;ll&nbsp;long&nbsp;long<br /><span style="color: #008080; ">25</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxn&nbsp;550<br /><span style="color: #008080; ">26</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxm&nbsp;50050<br /><span style="color: #008080; ">27</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n,&nbsp;m;<br /><span style="color: #008080; ">28</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;a[maxm],&nbsp;b[maxm];<br /><span style="color: #008080; ">29</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;d[maxn][maxn];<br /><span style="color: #008080; ">30</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;c[maxm];<br /><span style="color: #008080; ">31</span>&nbsp;vector&lt;<span style="color: #0000FF; ">int</span>&gt;&nbsp;vec[maxn];<br /><span style="color: #008080; ">32</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;x,&nbsp;y,&nbsp;z;<br /><span style="color: #008080; ">33</span>&nbsp;<br /><span style="color: #008080; ">34</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;dfs(<span style="color: #0000FF; ">int</span>&nbsp;s,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;t,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;fa)&nbsp;{<br /><span style="color: #008080; ">35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(s&nbsp;==&nbsp;t)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(vector&lt;<span style="color: #0000FF; ">int</span>&gt;::const_iterator&nbsp;it&nbsp;=&nbsp;vec[s].begin();&nbsp;it&nbsp;!=&nbsp;vec[s].end();&nbsp;it++)&nbsp;{<br /><span style="color: #008080; ">37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(*it&nbsp;!=&nbsp;fa&nbsp;&amp;&amp;&nbsp;dfs(*it,&nbsp;t,&nbsp;s))&nbsp;{<br /><span style="color: #008080; ">38</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(z&nbsp;&gt;&nbsp;d[s][*it])&nbsp;{<br /><span style="color: #008080; ">39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;=&nbsp;s;<br /><span style="color: #008080; ">40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y&nbsp;=&nbsp;*it;<br /><span style="color: #008080; ">41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;z&nbsp;=&nbsp;d[x][y];<br /><span style="color: #008080; ">42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">43</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br /><span style="color: #008080; ">47</span>&nbsp;}<br /><span style="color: #008080; ">48</span>&nbsp;<br /><span style="color: #008080; ">49</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br /><span style="color: #008080; ">50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;Case&nbsp;=&nbsp;1;<br /><span style="color: #008080; ">51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(cin&nbsp;&gt;&gt;&nbsp;n&nbsp;&gt;&gt;&nbsp;m)&nbsp;{<br /><span style="color: #008080; ">52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vec[i].clear();<br /><span style="color: #008080; ">54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fill(d[i],&nbsp;d[i]&nbsp;+&nbsp;n,&nbsp;maxm);<br /><span style="color: #008080; ">55</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">56</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;m;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">57</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("&nbsp;%c%d%d",&nbsp;&amp;c[i],&nbsp;&amp;a[i],&nbsp;&amp;b[i]);<br /><span style="color: #008080; ">58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(c[i]&nbsp;==&nbsp;'D')&nbsp;d[a[i]][b[i]]&nbsp;=&nbsp;d[b[i]][a[i]]&nbsp;=&nbsp;i;<br /><span style="color: #008080; ">59</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">60</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(Case&nbsp;&gt;&nbsp;1)&nbsp;puts("");<br /><span style="color: #008080; ">61</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("Case&nbsp;%d:\n",&nbsp;Case++);<br /><span style="color: #008080; ">62</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;m;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">63</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(c[i]&nbsp;==&nbsp;'I')&nbsp;{<br /><span style="color: #008080; ">64</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;z&nbsp;=&nbsp;maxm;<br /><span style="color: #008080; ">65</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(dfs(a[i],&nbsp;b[i],&nbsp;-1))&nbsp;{<br /><span style="color: #008080; ">66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(z&nbsp;&lt;&nbsp;d[a[i]][b[i]])&nbsp;{<br /><span style="color: #008080; ">67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vec[x].erase(remove(vec[x].begin(),&nbsp;vec[x].end(),&nbsp;y),&nbsp;vec[x].end());<br /><span style="color: #008080; ">68</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vec[y].erase(remove(vec[y].begin(),&nbsp;vec[y].end(),&nbsp;x),&nbsp;vec[y].end());<br /><span style="color: #008080; ">69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vec[a[i]].pb(b[i]);<br /><span style="color: #008080; ">70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vec[b[i]].pb(a[i]);<br /><span style="color: #008080; ">71</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">72</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br /><span style="color: #008080; ">73</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vec[a[i]].pb(b[i]);<br /><span style="color: #008080; ">74</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vec[b[i]].pb(a[i]);<br /><span style="color: #008080; ">75</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">76</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>(c[i]&nbsp;==&nbsp;'D')&nbsp;{<br /><span style="color: #008080; ">77</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vec[a[i]].erase(remove(vec[a[i]].begin(),&nbsp;vec[a[i]].end(),&nbsp;b[i]),&nbsp;vec[a[i]].end());<br /><span style="color: #008080; ">78</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vec[b[i]].erase(remove(vec[b[i]].begin(),&nbsp;vec[b[i]].end(),&nbsp;a[i]),&nbsp;vec[b[i]].end());<br /><span style="color: #008080; ">79</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br /><span style="color: #008080; ">80</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts(dfs(a[i],&nbsp;b[i],&nbsp;-1)&nbsp;?&nbsp;"YES"&nbsp;:&nbsp;"NO");<br /><span style="color: #008080; ">81</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">82</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">83</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">84</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">85</span>&nbsp;}<br /><span style="color: #008080; ">86</span>&nbsp;</div><img src ="http://www.cppblog.com/y346491470/aggbug/174937.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2012-05-15 09:03 <a href="http://www.cppblog.com/y346491470/articles/174937.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hdoj 1534 Schedule Problem - 差分约束</title><link>http://www.cppblog.com/y346491470/articles/171837.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Wed, 18 Apr 2012 02:28:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/171837.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/171837.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/171837.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/171837.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/171837.html</trackback:ping><description><![CDATA[【题意】：给出n个任务以及他们的运行时间t[i].其中有4种依赖关系: FAS, FAF, SAF和SAS. F&#8212;finish,S&#8212;start,A&#8212;after.给出很多组关系,<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[ FAS i j ]表示i的finish要发生在j的start之后,其他关系以此类推.<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;求一种调度方案使时间最短并输出每个任务的开始时间.<br /><br />【题解】：设s[i]为任务i的开始时间，v[i]为任务i的运行时间：<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;对于每种限制，都可以转化为不等式关系。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SAF a b =&gt; s[a] &gt;= s[b] + val[b];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;FAF a b =&gt; s[a] + v[a] &gt;= s[b] + v[b];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SAS a b =&gt; s[a] &gt;= s[b];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;FAS a b =&gt; s[a] + v[a] &gt;= s[b];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 题目有一个条件是是第一个任务开始时间必须为0，还有一个隐含条件是所有任务的开始时间必须大于等于0.<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;构造一个差分约束系统求最长路既可得到每个任务的最短开始时间。<br /><br />【代码】：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp; 1</span>&nbsp;#include&nbsp;"iostream"<br /><span style="color: #008080; ">&nbsp;&nbsp;2</span>&nbsp;#include&nbsp;"cstdio"<br /><span style="color: #008080; ">&nbsp;&nbsp;3</span>&nbsp;#include&nbsp;"cstring"<br /><span style="color: #008080; ">&nbsp;&nbsp;4</span>&nbsp;#include&nbsp;"algorithm"<br /><span style="color: #008080; ">&nbsp;&nbsp;5</span>&nbsp;#include&nbsp;"vector"<br /><span style="color: #008080; ">&nbsp;&nbsp;6</span>&nbsp;#include&nbsp;"queue"<br /><span style="color: #008080; ">&nbsp;&nbsp;7</span>&nbsp;#include&nbsp;"cmath"<br /><span style="color: #008080; ">&nbsp;&nbsp;8</span>&nbsp;#include&nbsp;"string"<br /><span style="color: #008080; ">&nbsp;&nbsp;9</span>&nbsp;#include&nbsp;"cctype"<br /><span style="color: #008080; ">&nbsp;10</span>&nbsp;#include&nbsp;"map"<br /><span style="color: #008080; ">&nbsp;11</span>&nbsp;#include&nbsp;"iomanip"<br /><span style="color: #008080; ">&nbsp;12</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008080; ">&nbsp;13</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;pb&nbsp;push_back<br /><span style="color: #008080; ">&nbsp;14</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;mp&nbsp;make_pair<br /><span style="color: #008080; ">&nbsp;15</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;fi&nbsp;first<br /><span style="color: #008080; ">&nbsp;16</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;se&nbsp;second<br /><span style="color: #008080; ">&nbsp;17</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1)<br /><span style="color: #008080; ">&nbsp;18</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;rc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1&nbsp;|&nbsp;1)<br /><span style="color: #008080; ">&nbsp;19</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lowbit(x)&nbsp;(x&nbsp;&amp;&nbsp;(-x))<br /><span style="color: #008080; ">&nbsp;20</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;ll&nbsp;long&nbsp;long<br /><span style="color: #008080; ">&nbsp;21</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxn&nbsp;10050<br /><span style="color: #008080; ">&nbsp;22</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxm&nbsp;500000<br /><span style="color: #008080; ">&nbsp;23</span>&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;inf&nbsp;=&nbsp;1&nbsp;&lt;&lt;&nbsp;29;<br /><span style="color: #008080; ">&nbsp;24</span>&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;Edge&nbsp;{<br /><span style="color: #008080; ">&nbsp;25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;v,&nbsp;cost,&nbsp;next;<br /><span style="color: #008080; ">&nbsp;26</span>&nbsp;}&nbsp;et[maxm];<br /><span style="color: #008080; ">&nbsp;27</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;28</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;eh[maxn],&nbsp;tot,&nbsp;dist[maxn],&nbsp;cnt[maxn];<br /><span style="color: #008080; ">&nbsp;29</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;visit[maxn];<br /><span style="color: #008080; ">&nbsp;30</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n,&nbsp;m;<br /><span style="color: #008080; ">&nbsp;31</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;val[maxn];<br /><span style="color: #008080; ">&nbsp;32</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;s;<br /><span style="color: #008080; ">&nbsp;33</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;34</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;init()&nbsp;{<br /><span style="color: #008080; ">&nbsp;35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tot&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">&nbsp;36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(eh,&nbsp;-1,&nbsp;<span style="color: #0000FF; ">sizeof</span>&nbsp;(eh));<br /><span style="color: #008080; ">&nbsp;37</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;38</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;39</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;addedge(<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;v,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cost)&nbsp;{<br /><span style="color: #008080; ">&nbsp;40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Edge&nbsp;e&nbsp;=&nbsp;{u,&nbsp;v,&nbsp;cost,&nbsp;eh[u]};<br /><span style="color: #008080; ">&nbsp;41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;et[tot]&nbsp;=&nbsp;e;<br /><span style="color: #008080; ">&nbsp;42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eh[u]&nbsp;=&nbsp;tot++;<br /><span style="color: #008080; ">&nbsp;43</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;44</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;45</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;spfa(<span style="color: #0000FF; ">int</span>&nbsp;s)&nbsp;{<br /><span style="color: #008080; ">&nbsp;46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)&nbsp;visit[i]&nbsp;=&nbsp;<span style="color: #0000FF; ">false</span>,&nbsp;dist[i]&nbsp;=&nbsp;-inf,&nbsp;cnt[i]&nbsp;=&nbsp;0;<span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;47</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;dist[s]&nbsp;=&nbsp;0,&nbsp;visit[s]&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>,&nbsp;cnt[s]++;<br /><span style="color: #008080; ">&nbsp;48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;queue&lt;<span style="color: #0000FF; ">int</span>&gt;&nbsp;que;<br /><span style="color: #008080; ">&nbsp;49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;que.push(s);<br /><span style="color: #008080; ">&nbsp;50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(!que.empty())&nbsp;{<br /><span style="color: #008080; ">&nbsp;51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u&nbsp;=&nbsp;que.front();<br /><span style="color: #008080; ">&nbsp;52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;que.pop(),&nbsp;visit[u]&nbsp;=&nbsp;<span style="color: #0000FF; ">false</span>;<br /><span style="color: #008080; ">&nbsp;53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;eh[u];&nbsp;i&nbsp;!=&nbsp;-1;&nbsp;i&nbsp;=&nbsp;et[i].next)&nbsp;{<br /><span style="color: #008080; ">&nbsp;54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;v&nbsp;=&nbsp;et[i].v,&nbsp;cost&nbsp;=&nbsp;et[i].cost;<br /><span style="color: #008080; ">&nbsp;55</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(dist[v]&nbsp;&lt;&nbsp;cost&nbsp;+&nbsp;dist[u])&nbsp;{<span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;56</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[v]&nbsp;=&nbsp;cost&nbsp;+&nbsp;dist[u];<br /><span style="color: #008080; ">&nbsp;57</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!visit[v])&nbsp;{<br /><span style="color: #008080; ">&nbsp;58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visit[v]&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">&nbsp;59</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;que.push(v);<br /><span style="color: #008080; ">&nbsp;60</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnt[v]++;<br /><span style="color: #008080; ">&nbsp;61</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(cnt[v]&nbsp;&gt;=&nbsp;n&nbsp;+&nbsp;1)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;&nbsp;<br /><span style="color: #008080; ">&nbsp;62</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;63</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;64</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;65</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">&nbsp;67</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;68</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;69</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br /><span style="color: #008080; ">&nbsp;70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;s;<br /><span style="color: #008080; ">&nbsp;71</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;Case&nbsp;=&nbsp;1;<br /><span style="color: #008080; ">&nbsp;72</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(~scanf("%d",&nbsp;&amp;n))&nbsp;{<br /><span style="color: #008080; ">&nbsp;73</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!n)&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">&nbsp;74</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();<br /><span style="color: #008080; ">&nbsp;75</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">&nbsp;76</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&amp;val[i]);<br /><span style="color: #008080; ">&nbsp;77</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addedge(0,&nbsp;i,&nbsp;0);<br /><span style="color: #008080; ">&nbsp;78</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;79</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addedge(1,&nbsp;0,&nbsp;0);<br /><span style="color: #008080; ">&nbsp;80</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;a,&nbsp;b;<br /><span style="color: #008080; ">&nbsp;81</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(1)&nbsp;{<br /><span style="color: #008080; ">&nbsp;82</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cin&nbsp;&gt;&gt;&nbsp;s;<br /><span style="color: #008080; ">&nbsp;83</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(s&nbsp;==&nbsp;"#")&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">&nbsp;84</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d",&nbsp;&amp;a,&nbsp;&amp;b);<br /><span style="color: #008080; ">&nbsp;85</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(s&nbsp;==&nbsp;"SAF")&nbsp;addedge(b,&nbsp;a,&nbsp;val[b]);<br /><span style="color: #008080; ">&nbsp;86</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>(s&nbsp;==&nbsp;"FAF")&nbsp;addedge(b,&nbsp;a,&nbsp;val[b]&nbsp;-&nbsp;val[a]);<br /><span style="color: #008080; ">&nbsp;87</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>(s&nbsp;==&nbsp;"SAS")&nbsp;addedge(b,&nbsp;a,&nbsp;0);<br /><span style="color: #008080; ">&nbsp;88</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>(s&nbsp;==&nbsp;"FAS")&nbsp;addedge(b,&nbsp;a,&nbsp;-val[a]);<br /><span style="color: #008080; ">&nbsp;89</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;90</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("Case&nbsp;%d:\n",&nbsp;Case++);<br /><span style="color: #008080; ">&nbsp;91</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(spfa(0))&nbsp;{<br /><span style="color: #008080; ">&nbsp;92</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">&nbsp;93</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d&nbsp;%d\n",&nbsp;i,&nbsp;dist[i]);<br /><span style="color: #008080; ">&nbsp;94</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;95</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;printf("impossible\n");<br /><span style="color: #008080; ">&nbsp;96</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("\n");<br /><span style="color: #008080; ">&nbsp;97</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;98</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">&nbsp;99</span>&nbsp;}<br /><span style="color: #008080; ">100</span>&nbsp;</div><img src ="http://www.cppblog.com/y346491470/aggbug/171837.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2012-04-18 10:28 <a href="http://www.cppblog.com/y346491470/articles/171837.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hdoj 3987 Harry Potter and the Forbidden Forest - 最大流最小割 + 割边最少</title><link>http://www.cppblog.com/y346491470/articles/171752.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Tue, 17 Apr 2012 05:35:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/171752.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/171752.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/171752.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/171752.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/171752.html</trackback:ping><description><![CDATA[【题意】：给出一幅图，求边最小的最小割。<br /><br />【题解】：求两次最小割。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;第一次求出所有割边。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;然后把割边容量设成1，非割边容量为inf，再求一次最小割即为答案。<br /><br />【代码】：<br /><div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; border-image: initial; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;#include&nbsp;"iostream"<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;#include&nbsp;"cstdio"<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;#include&nbsp;"cstring"<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxn&nbsp;1000<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxm&nbsp;500000<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;inf&nbsp;=&nbsp;1&nbsp;&lt;&lt;&nbsp;30;<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;s,&nbsp;t,&nbsp;n,&nbsp;m;<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;eh[maxn],&nbsp;low[maxn],&nbsp;dist[maxn],&nbsp;cnt[maxn],&nbsp;tot,&nbsp;pre[maxn],&nbsp;cur[maxn];<br /><span style="color: #008080; ">10</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;color[maxn];<br /><span style="color: #008080; ">11</span>&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;Edge&nbsp;{<br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;v,&nbsp;cap,&nbsp;flow,&nbsp;next;<br /><span style="color: #008080; ">13</span>&nbsp;}et[maxm];<br /><span style="color: #008080; ">14</span>&nbsp;<br /><span style="color: #008080; ">15</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;init()&nbsp;{<br /><span style="color: #008080; ">16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tot&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">17</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(eh,&nbsp;-1,&nbsp;<span style="color: #0000FF; ">sizeof</span>(eh));<br /><span style="color: #008080; ">18</span>&nbsp;}<br /><span style="color: #008080; ">19</span>&nbsp;<br /><span style="color: #008080; ">20</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;add(<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;v,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cap,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;flow)&nbsp;{<br /><span style="color: #008080; ">21</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Edge&nbsp;e&nbsp;=&nbsp;{u,&nbsp;v,&nbsp;cap,&nbsp;flow,&nbsp;eh[u]};<br /><span style="color: #008080; ">22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;et[tot]&nbsp;=&nbsp;e;<br /><span style="color: #008080; ">23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eh[u]&nbsp;=&nbsp;tot++;<br /><span style="color: #008080; ">24</span>&nbsp;}<br /><span style="color: #008080; ">25</span>&nbsp;<br /><span style="color: #008080; ">26</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;addedge(<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;v,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cap)&nbsp;{<br /><span style="color: #008080; ">27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add(u,&nbsp;v,&nbsp;cap,&nbsp;0),&nbsp;add(v,&nbsp;u,&nbsp;0,&nbsp;0);<br /><span style="color: #008080; ">28</span>&nbsp;}<br /><span style="color: #008080; ">29</span>&nbsp;<br /><span style="color: #008080; ">30</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;isap(<span style="color: #0000FF; ">int</span>&nbsp;s,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;t,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n)&nbsp;{<br /><span style="color: #008080; ">31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;v,&nbsp;now,&nbsp;flow&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(low,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(low));<br /><span style="color: #008080; ">33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(cnt,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(cnt));<br /><span style="color: #008080; ">34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(dist,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(dist));<br /><span style="color: #008080; ">35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(u&nbsp;=&nbsp;0;&nbsp;u&nbsp;&lt;=&nbsp;n;&nbsp;u++)&nbsp;cur[u]&nbsp;=&nbsp;eh[u];<br /><span style="color: #008080; ">36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;low[s]&nbsp;=&nbsp;inf,&nbsp;cnt[0]&nbsp;=&nbsp;n;<br /><span style="color: #008080; ">37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u&nbsp;=&nbsp;s;<br /><span style="color: #008080; ">38</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(dist[s]&nbsp;&lt;&nbsp;n)&nbsp;{<br /><span style="color: #008080; ">39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(now&nbsp;=&nbsp;cur[u];&nbsp;now&nbsp;!=&nbsp;-1;&nbsp;now&nbsp;=&nbsp;et[now].next)<br /><span style="color: #008080; ">40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(et[now].cap&nbsp;-&nbsp;et[now].flow&nbsp;&amp;&amp;&nbsp;dist[u]&nbsp;==&nbsp;dist[v&nbsp;=&nbsp;et[now].v]&nbsp;+&nbsp;1)&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(now&nbsp;!=&nbsp;-1)&nbsp;{<br /><span style="color: #008080; ">42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cur[u]&nbsp;=&nbsp;pre[v]&nbsp;=&nbsp;now;<br /><span style="color: #008080; ">43</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;low[v]&nbsp;=&nbsp;min(low[u],&nbsp;et[now].cap&nbsp;-&nbsp;et[now].flow);<br /><span style="color: #008080; ">44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u&nbsp;=&nbsp;v;<br /><span style="color: #008080; ">45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(u&nbsp;==&nbsp;t)&nbsp;{<br /><span style="color: #008080; ">46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(;&nbsp;u&nbsp;!=&nbsp;s;&nbsp;u&nbsp;=&nbsp;et[pre[u]].u)&nbsp;{<br /><span style="color: #008080; ">47</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;et[pre[u]].flow&nbsp;+=&nbsp;low[t];<br /><span style="color: #008080; ">48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;et[pre[u]^1].flow&nbsp;-=&nbsp;low[t];<br /><span style="color: #008080; ">49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;low[s]&nbsp;=&nbsp;inf,&nbsp;flow&nbsp;+=&nbsp;low[t];<br /><span style="color: #008080; ">51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br /><span style="color: #008080; ">53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(--cnt[dist[u]]&nbsp;==&nbsp;0)&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[u]&nbsp;=&nbsp;n;<br /><span style="color: #008080; ">55</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cur[u]&nbsp;=&nbsp;eh[u];<br /><span style="color: #008080; ">56</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(now&nbsp;=&nbsp;eh[u];&nbsp;now&nbsp;!=&nbsp;-1;&nbsp;now&nbsp;=&nbsp;et[now].next)<br /><span style="color: #008080; ">57</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(et[now].cap&nbsp;-&nbsp;et[now].flow&nbsp;&amp;&amp;&nbsp;dist[u]&nbsp;&gt;&nbsp;dist[v&nbsp;=&nbsp;et[now].v]&nbsp;+&nbsp;1)<br /><span style="color: #008080; ">58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[u]&nbsp;=&nbsp;dist[v]&nbsp;+&nbsp;1;<br /><span style="color: #008080; ">59</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnt[dist[u]]++;<br /><span style="color: #008080; ">60</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(u&nbsp;!=&nbsp;s)&nbsp;u&nbsp;=&nbsp;et[pre[u]].u;<br /><span style="color: #008080; ">61</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">62</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">63</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;flow;<br /><span style="color: #008080; ">64</span>&nbsp;}<br /><span style="color: #008080; ">65</span>&nbsp;<br /><span style="color: #008080; ">66</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;dfs(<span style="color: #0000FF; ">int</span>&nbsp;u)&nbsp;{<br /><span style="color: #008080; ">67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color[u]&nbsp;=&nbsp;1;<br /><span style="color: #008080; ">68</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;eh[u];&nbsp;i&nbsp;!=&nbsp;-1;&nbsp;i&nbsp;=&nbsp;et[i].next)<br /><span style="color: #008080; ">69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!color[et[i].v]&nbsp;&amp;&amp;&nbsp;et[i].cap&nbsp;-&nbsp;et[i].flow)&nbsp;<br /><span style="color: #008080; ">70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dfs(et[i].v);<br /><span style="color: #008080; ">71</span>&nbsp;}<br /><span style="color: #008080; ">72</span>&nbsp;<br /><span style="color: #008080; ">73</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br /><span style="color: #008080; ">74</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;T;<br /><span style="color: #008080; ">75</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&amp;T);<br /><span style="color: #008080; ">76</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;tt&nbsp;=&nbsp;1;&nbsp;tt&nbsp;&lt;=&nbsp;T;&nbsp;tt++)&nbsp;{<br /><span style="color: #008080; ">77</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d",&nbsp;&amp;n,&nbsp;&amp;m);<br /><span style="color: #008080; ">78</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();<br /><span style="color: #008080; ">79</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;=&nbsp;0,&nbsp;t&nbsp;=&nbsp;n&nbsp;-&nbsp;1;<br /><span style="color: #008080; ">80</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;m;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">81</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;v,&nbsp;cap,&nbsp;d;<br /><span style="color: #008080; ">82</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d%d%d",&nbsp;&amp;u,&nbsp;&amp;v,&nbsp;&amp;cap,&nbsp;&amp;d);<br /><span style="color: #008080; ">83</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(d)&nbsp;addedge(u,&nbsp;v,&nbsp;cap),&nbsp;addedge(v,&nbsp;u,&nbsp;cap);<br /><span style="color: #008080; ">84</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;addedge(u,&nbsp;v,&nbsp;cap);<br /><span style="color: #008080; ">85</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">86</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isap(s,&nbsp;t,&nbsp;n);<br /><span style="color: #008080; ">87</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;tot;&nbsp;i&nbsp;+=&nbsp;2)&nbsp;{<br /><span style="color: #008080; ">88</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(et[i].cap&nbsp;==&nbsp;et[i].flow)&nbsp;et[i].cap&nbsp;=&nbsp;1,&nbsp;et[i].flow&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">89</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;et[i].flow&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">90</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;et[i^1].cap&nbsp;=&nbsp;et[i^1].flow&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">91</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">92</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;ans&nbsp;=&nbsp;isap(s,&nbsp;t,&nbsp;n);<br /><span style="color: #008080; ">93</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("Case&nbsp;%d:&nbsp;%d\n",&nbsp;tt,&nbsp;ans);<br /><span style="color: #008080; ">94</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">95</span>&nbsp;}<br /><span style="color: #008080; ">96</span>&nbsp;</div><img src ="http://www.cppblog.com/y346491470/aggbug/171752.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2012-04-17 13:35 <a href="http://www.cppblog.com/y346491470/articles/171752.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hdoj 4115 Eliminate the Conflict - 2-Sat</title><link>http://www.cppblog.com/y346491470/articles/171730.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Tue, 17 Apr 2012 03:25:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/171730.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/171730.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/171730.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/171730.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/171730.html</trackback:ping><description><![CDATA[【题意】：Alice和Bob要玩n局剪刀石头布， Alice已知Bob在n个回合中每一回合所出的类型（Bob好悲催！OIZ）。现在对于Alice有m个限制，每个限制由a,b,k三个数字来描述。如果k等于0，则代表第a局和第b局Alice必须出的相同。如果k==1，则代表第a局和第b局Alice必须出的不同。求是否存在可以使得Alice每局必胜且符合以上m个要求的方案。&nbsp;<br /><br />【题解】：初看像是3-sat的东西，但是3-sat是个NP问题。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;仔细分析，每个回合对于Alice只有两种可能，就是平或者赢，因为Alice要保证不输，所以转化为2-sat问题。<br /><br />【代码】：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;#include&nbsp;"iostream"<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;#include&nbsp;"cstring"<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;#include&nbsp;"cstdio"<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;MAX&nbsp;10500<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxn&nbsp;20500<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxm&nbsp;10000000<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n,&nbsp;m;<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;Bob[MAX],&nbsp;Alice[MAX][2];<br /><span style="color: #008080; ">10</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;dfn[maxn],&nbsp;low[maxn],&nbsp;Dindex,&nbsp;belong[maxn],&nbsp;scc;<br /><span style="color: #008080; ">11</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;s[maxn],&nbsp;top;<br /><span style="color: #008080; ">12</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;eh[maxn],&nbsp;tot;<br /><span style="color: #008080; ">13</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;instack[maxn];<br /><span style="color: #008080; ">14</span>&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;Edge&nbsp;{<br /><span style="color: #008080; ">15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;v,&nbsp;next;<br /><span style="color: #008080; ">16</span>&nbsp;}et[maxm];<br /><span style="color: #008080; ">17</span>&nbsp;<br /><span style="color: #008080; ">18</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;init()&nbsp;{<br /><span style="color: #008080; ">19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tot&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(eh,&nbsp;-1,&nbsp;<span style="color: #0000FF; ">sizeof</span>(eh));<br /><span style="color: #008080; ">21</span>&nbsp;}<br /><span style="color: #008080; ">22</span>&nbsp;<br /><span style="color: #008080; ">23</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;addedge(<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;v)&nbsp;{<br /><span style="color: #008080; ">24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Edge&nbsp;e&nbsp;=&nbsp;{v,&nbsp;eh[u]};<br /><span style="color: #008080; ">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;et[tot]&nbsp;=&nbsp;e;<br /><span style="color: #008080; ">26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eh[u]&nbsp;=&nbsp;tot++;<br /><span style="color: #008080; ">27</span>&nbsp;}<br /><span style="color: #008080; ">28</span>&nbsp;<br /><span style="color: #008080; ">29</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;dfs(<span style="color: #0000FF; ">int</span>&nbsp;u)&nbsp;{<br /><span style="color: #008080; ">30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;v;<br /><span style="color: #008080; ">31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dfn[u]&nbsp;=&nbsp;low[u]&nbsp;=&nbsp;++Dindex;<br /><span style="color: #008080; ">32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s[++top]&nbsp;=&nbsp;u,&nbsp;instack[u]&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;eh[u];&nbsp;i&nbsp;!=&nbsp;-1;&nbsp;i&nbsp;=&nbsp;et[i].next)&nbsp;{<br /><span style="color: #008080; ">34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v&nbsp;=&nbsp;et[i].v;<br /><span style="color: #008080; ">35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!dfn[v])&nbsp;dfs(v),&nbsp;low[u]&nbsp;=&nbsp;min(low[u],&nbsp;low[v]);<br /><span style="color: #008080; ">36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>(instack[v])&nbsp;low[u]&nbsp;=&nbsp;min(low[u],&nbsp;dfn[v]);<br /><span style="color: #008080; ">37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">38</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(dfn[u]&nbsp;==&nbsp;low[u])&nbsp;{<br /><span style="color: #008080; ">39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scc++;<br /><span style="color: #008080; ">40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">do</span>&nbsp;{<br /><span style="color: #008080; ">41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v&nbsp;=&nbsp;s[top--];<br /><span style="color: #008080; ">42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;instack[v]&nbsp;=&nbsp;<span style="color: #0000FF; ">false</span>;<br /><span style="color: #008080; ">43</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;belong[v]&nbsp;=&nbsp;scc;<br /><span style="color: #008080; ">44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">while</span>(u&nbsp;!=&nbsp;v);<br /><span style="color: #008080; ">45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">46</span>&nbsp;}<br /><span style="color: #008080; ">47</span>&nbsp;<br /><span style="color: #008080; ">48</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;tarjan()&nbsp;{<br /><span style="color: #008080; ">49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top&nbsp;=&nbsp;scc&nbsp;=&nbsp;Dindex&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(dfn,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(dfn));<br /><span style="color: #008080; ">51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(instack,&nbsp;<span style="color: #0000FF; ">false</span>,&nbsp;<span style="color: #0000FF; ">sizeof</span>(instack));<br /><span style="color: #008080; ">52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;2&nbsp;*&nbsp;n;&nbsp;i++)<br /><span style="color: #008080; ">53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!dfn[i])&nbsp;dfs(i);<br /><span style="color: #008080; ">54</span>&nbsp;}<br /><span style="color: #008080; ">55</span>&nbsp;<br /><span style="color: #008080; ">56</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;solvable()&nbsp;{<br /><span style="color: #008080; ">57</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)<br /><span style="color: #008080; ">58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(belong[i]&nbsp;==&nbsp;belong[i+n])&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br /><span style="color: #008080; ">59</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">60</span>&nbsp;}<br /><span style="color: #008080; ">61</span>&nbsp;<br /><span style="color: #008080; ">62</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br /><span style="color: #008080; ">63</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;T,&nbsp;Case&nbsp;=&nbsp;1;<br /><span style="color: #008080; ">64</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;a,&nbsp;b,&nbsp;c;<br /><span style="color: #008080; ">65</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&amp;T);<br /><span style="color: #008080; ">66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(T--)&nbsp;{<br /><span style="color: #008080; ">67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();<br /><span style="color: #008080; ">68</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d",&nbsp;&amp;n,&nbsp;&amp;m);<br /><span style="color: #008080; ">69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&amp;Bob[i]);<br /><span style="color: #008080; ">71</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(Bob[i]&nbsp;==&nbsp;1)&nbsp;Alice[i][0]&nbsp;=&nbsp;1,&nbsp;Alice[i][1]&nbsp;=&nbsp;2;<br /><span style="color: #008080; ">72</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>(Bob[i]&nbsp;==&nbsp;2)&nbsp;Alice[i][0]&nbsp;=&nbsp;2,&nbsp;Alice[i][1]&nbsp;=&nbsp;3;<br /><span style="color: #008080; ">73</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;Alice[i][0]&nbsp;=&nbsp;3,&nbsp;Alice[i][1]&nbsp;=&nbsp;1;<br /><span style="color: #008080; ">74</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">75</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;m;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">76</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d%d",&nbsp;&amp;a,&nbsp;&amp;b,&nbsp;&amp;c);<br /><span style="color: #008080; ">77</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(c)&nbsp;{<br /><span style="color: #008080; ">78</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(Alice[a][0]&nbsp;==&nbsp;Alice[b][0])&nbsp;addedge(a,&nbsp;b&nbsp;+&nbsp;n),&nbsp;addedge(b,&nbsp;a&nbsp;+&nbsp;n);<br /><span style="color: #008080; ">79</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>(Alice[a][0]&nbsp;==&nbsp;Alice[b][1])&nbsp;addedge(a,&nbsp;b),&nbsp;addedge(b&nbsp;+&nbsp;n,&nbsp;a&nbsp;+&nbsp;n);<br /><span style="color: #008080; ">80</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(Alice[a][1]&nbsp;==&nbsp;Alice[b][0])&nbsp;addedge(a&nbsp;+&nbsp;n,&nbsp;b&nbsp;+&nbsp;n),&nbsp;addedge(b,&nbsp;a);<br /><span style="color: #008080; ">81</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>(Alice[a][1]&nbsp;==&nbsp;Alice[b][1])&nbsp;addedge(a&nbsp;+&nbsp;n,&nbsp;b),&nbsp;addedge(b&nbsp;+&nbsp;n,&nbsp;a);<br /><span style="color: #008080; ">82</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br /><span style="color: #008080; ">83</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(Alice[a][0]&nbsp;!=&nbsp;Alice[b][0])&nbsp;addedge(a,&nbsp;b&nbsp;+&nbsp;n),&nbsp;addedge(b,&nbsp;a&nbsp;+&nbsp;n);<br /><span style="color: #008080; ">84</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(Alice[a][0]&nbsp;!=&nbsp;Alice[b][1])&nbsp;addedge(a,&nbsp;b),&nbsp;addedge(b&nbsp;+&nbsp;n,&nbsp;a&nbsp;+&nbsp;n);<br /><span style="color: #008080; ">85</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(Alice[a][1]&nbsp;!=&nbsp;Alice[b][0])&nbsp;addedge(a&nbsp;+&nbsp;n,&nbsp;b&nbsp;+&nbsp;n)&nbsp;,&nbsp;addedge(b,&nbsp;a);<br /><span style="color: #008080; ">86</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(Alice[a][1]&nbsp;!=&nbsp;Alice[b][1])&nbsp;addedge(a&nbsp;+&nbsp;n,&nbsp;b),&nbsp;addedge(b&nbsp;+&nbsp;n,&nbsp;a);<br /><span style="color: #008080; ">87</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">88</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">89</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tarjan();<br /><span style="color: #008080; ">90</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("Case&nbsp;#%d:&nbsp;",&nbsp;Case++);<br /><span style="color: #008080; ">91</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(solvable())&nbsp;printf("yes\n");<br /><span style="color: #008080; ">92</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;printf("no\n");<br /><span style="color: #008080; ">93</span>&nbsp;<br /><span style="color: #008080; ">94</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">95</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">96</span>&nbsp;}<br /><span style="color: #008080; ">97</span>&nbsp;</div><img src ="http://www.cppblog.com/y346491470/aggbug/171730.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2012-04-17 11:25 <a href="http://www.cppblog.com/y346491470/articles/171730.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hdoj 3691 Nubulsa Expo - 全局最小割</title><link>http://www.cppblog.com/y346491470/articles/171097.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Thu, 12 Apr 2012 08:18:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/171097.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/171097.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/171097.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/171097.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/171097.html</trackback:ping><description><![CDATA[【题意】：给出一个无向图和源点，问以哪个点为汇点的最大流最小。<br /><br />【题解】：朴素方法是枚举汇点，每一次跑一个最大流，但这明显会超时。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;由最大流最小割定理，转化为最小割最小。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;然后用Stoer-Wagner算法，直接求全局最小割即为答案，时间复杂度为O(n*n*n).<br /><br />【代码】：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;#include&nbsp;"iostream"<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;#include&nbsp;"cstdio"<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;#include&nbsp;"cstring"<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;#include&nbsp;"algorithm"<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;#include&nbsp;"vector"<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;#include&nbsp;"queue"<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;#include&nbsp;"cmath"<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;#include&nbsp;"string"<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;#include&nbsp;"cctype"<br /><span style="color: #008080; ">10</span>&nbsp;#include&nbsp;"map"<br /><span style="color: #008080; ">11</span>&nbsp;#include&nbsp;"iomanip"<br /><span style="color: #008080; ">12</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008080; ">13</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;pb&nbsp;push_back<br /><span style="color: #008080; ">14</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;mp&nbsp;make_pair<br /><span style="color: #008080; ">15</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;fi&nbsp;first<br /><span style="color: #008080; ">16</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;se&nbsp;second<br /><span style="color: #008080; ">17</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1)<br /><span style="color: #008080; ">18</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;rc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1&nbsp;|&nbsp;1)<br /><span style="color: #008080; ">19</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lowbit(x)&nbsp;(x&nbsp;&amp;&nbsp;(-x))<br /><span style="color: #008080; ">20</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;ll&nbsp;long&nbsp;long<br /><span style="color: #008080; ">21</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxn&nbsp;510<br /><span style="color: #008080; ">22</span>&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;inf&nbsp;=&nbsp;1&nbsp;&lt;&lt;&nbsp;27;<br /><span style="color: #008080; ">23</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;maz[maxn][maxn];<br /><span style="color: #008080; ">24</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n,&nbsp;m,&nbsp;s;<br /><span style="color: #008080; ">25</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;StoerWagner(<span style="color: #0000FF; ">int</span>&nbsp;n)&nbsp;{<span style="color: #008000; "><br /></span><span style="color: #008080; ">26</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cnt&nbsp;=&nbsp;n,&nbsp;s,&nbsp;t;<br /><span style="color: #008080; ">27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cut&nbsp;=&nbsp;inf;<br /><span style="color: #008080; ">28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;visit[maxn],&nbsp;use[maxn];<br /><span style="color: #008080; ">29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;dist[maxn];<br /><span style="color: #008080; ">30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(use,&nbsp;<span style="color: #0000FF; ">false</span>,&nbsp;<span style="color: #0000FF; ">sizeof</span>(use));<span style="color: #008000; "><br /></span><span style="color: #008080; ">31</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(--cnt&nbsp;&gt;&nbsp;0)&nbsp;{<br /><span style="color: #008080; ">32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(visit,&nbsp;<span style="color: #0000FF; ">false</span>,&nbsp;<span style="color: #0000FF; ">sizeof</span>(visit));<span style="color: #008000; "><br /></span><span style="color: #008080; ">33</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(dist,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(dist));<span style="color: #008000; "><br /></span><span style="color: #008080; ">34</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(use[u])&nbsp;u++;<br /><span style="color: #008080; ">36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visit[u]&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;v&nbsp;=&nbsp;0;&nbsp;v&nbsp;&lt;&nbsp;n;&nbsp;v++)<br /><span style="color: #008080; ">38</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!use[v]&nbsp;&amp;&amp;&nbsp;!visit[v])<br /><span style="color: #008080; ">39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[v]&nbsp;=&nbsp;maz[v][u];<br /><span style="color: #008080; ">40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;=&nbsp;t&nbsp;=&nbsp;u;<br /><span style="color: #008080; ">41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;u;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;max&nbsp;=&nbsp;0,&nbsp;idx&nbsp;=&nbsp;u;<br /><span style="color: #008080; ">43</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;0;&nbsp;j&nbsp;&lt;&nbsp;n;&nbsp;j++)<br /><span style="color: #008080; ">44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!use[j]&nbsp;&amp;&amp;&nbsp;!visit[j]&nbsp;&amp;&amp;&nbsp;dist[j]&nbsp;&gt;&nbsp;max)<br /><span style="color: #008080; ">45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;max&nbsp;=&nbsp;dist[idx&nbsp;=&nbsp;j];<br /><span style="color: #008080; ">46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!max)&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">47</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visit[idx]&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;0;&nbsp;j&nbsp;&lt;&nbsp;n;&nbsp;j++)<br /><span style="color: #008080; ">49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!use[j]&nbsp;&amp;&amp;&nbsp;!visit[j])<br /><span style="color: #008080; ">50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[j]&nbsp;+=&nbsp;maz[j][idx];<br /><span style="color: #008080; ">51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;=&nbsp;t,&nbsp;t&nbsp;=&nbsp;idx;<br /><span style="color: #008080; ">52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cut&nbsp;=&nbsp;min(cut,&nbsp;dist[t]);<br /><span style="color: #008080; ">54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;use[t]&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">55</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)<br /><span style="color: #008080; ">56</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!use[i])&nbsp;{<br /><span style="color: #008080; ">57</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maz[s][i]&nbsp;+=&nbsp;maz[t][i];<br /><span style="color: #008080; ">58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maz[i][s]&nbsp;+=&nbsp;maz[i][t];<br /><span style="color: #008080; ">59</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">60</span>&nbsp;<br /><span style="color: #008080; ">61</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">62</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;cut;<br /><span style="color: #008080; ">63</span>&nbsp;}<br /><span style="color: #008080; ">64</span>&nbsp;<br /><span style="color: #008080; ">65</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br /><span style="color: #008080; ">66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(~scanf("%d%d%d",&nbsp;&amp;n,&nbsp;&amp;m,&nbsp;&amp;s))&nbsp;{<br /><span style="color: #008080; ">67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!n)&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">68</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(maz,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(maz));<br /><span style="color: #008080; ">69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;m;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;a,&nbsp;b,&nbsp;c;<br /><span style="color: #008080; ">71</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d%d",&nbsp;&amp;a,&nbsp;&amp;b,&nbsp;&amp;c);<br /><span style="color: #008080; ">72</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a--,&nbsp;b--;<br /><span style="color: #008080; ">73</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maz[a][b]&nbsp;+=&nbsp;c;<br /><span style="color: #008080; ">74</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maz[b][a]&nbsp;+=&nbsp;c;<br /><span style="color: #008080; ">75</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">76</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;ans&nbsp;=&nbsp;StoerWagner(n);<br /><span style="color: #008080; ">77</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;&lt;&lt;&nbsp;ans&nbsp;&lt;&lt;&nbsp;endl;<br /><span style="color: #008080; ">78</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">79</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">80</span>&nbsp;}<br /><span style="color: #008080; ">81</span>&nbsp;</div><img src ="http://www.cppblog.com/y346491470/aggbug/171097.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2012-04-12 16:18 <a href="http://www.cppblog.com/y346491470/articles/171097.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>poj 1129 Channel Allocation - IDA星 + 图染色</title><link>http://www.cppblog.com/y346491470/articles/169031.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Mon, 26 Mar 2012 09:27:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/169031.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/169031.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/169031.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/169031.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/169031.html</trackback:ping><description><![CDATA[【题意】：给出一个平面图，问最少用多少种颜色来染色能够使得图中相邻结点颜色不同。<br /><br />【题解】：平面图染色，四色定理。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;直接dfs即可。<br /><br />【代码】：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;#include&nbsp;"iostream"<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;#include&nbsp;"cstdio"<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;#include&nbsp;"cstring"<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;#include&nbsp;"algorithm"<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;#include&nbsp;"vector"<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;#include&nbsp;"queue"<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;#include&nbsp;"cmath"<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;#include&nbsp;"string"<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;#include&nbsp;"cctype"<br /><span style="color: #008080; ">10</span>&nbsp;#include&nbsp;"map"<br /><span style="color: #008080; ">11</span>&nbsp;#include&nbsp;"iomanip"<br /><span style="color: #008080; ">12</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008080; ">13</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;pb&nbsp;push_back<br /><span style="color: #008080; ">14</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;mp&nbsp;make_pair<br /><span style="color: #008080; ">15</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;fi&nbsp;first<br /><span style="color: #008080; ">16</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;se&nbsp;second<br /><span style="color: #008080; ">17</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1)<br /><span style="color: #008080; ">18</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;rc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1&nbsp;|&nbsp;1)<br /><span style="color: #008080; ">19</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lowbit(x)&nbsp;(x&nbsp;&amp;&nbsp;(-x))<br /><span style="color: #008080; ">20</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;ll&nbsp;long&nbsp;long<br /><span style="color: #008080; ">21</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxn&nbsp;30<br /><span style="color: #008080; ">22</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;maz[maxn][maxn],&nbsp;visit[maxn];<br /><span style="color: #008080; ">23</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;color[maxn];<br /><span style="color: #008080; ">24</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n;<br /><span style="color: #008080; ">25</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;a,&nbsp;ch;<br /><span style="color: #008080; ">26</span>&nbsp;<br /><span style="color: #008080; ">27</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;dfs(<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cnt)&nbsp;{<br /><span style="color: #008080; ">28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(visit,&nbsp;<span style="color: #0000FF; ">false</span>,&nbsp;<span style="color: #0000FF; ">sizeof</span>(visit));<br /><span style="color: #008080; ">29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(u&nbsp;==&nbsp;n)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(color[i]&nbsp;!=&nbsp;-1&nbsp;&amp;&amp;&nbsp;maz[u][i])&nbsp;{<br /><span style="color: #008080; ">32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visit[color[i]]&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;cnt;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!visit[i])&nbsp;{<br /><span style="color: #008080; ">37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color[u]&nbsp;=&nbsp;i;<br /><span style="color: #008080; ">38</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(dfs(u+1,&nbsp;cnt))&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br /><span style="color: #008080; ">42</span>&nbsp;}<br /><span style="color: #008080; ">43</span>&nbsp;<br /><span style="color: #008080; ">44</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;solve()&nbsp;{<br /><span style="color: #008080; ">45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;ans&nbsp;=&nbsp;5;<br /><span style="color: #008080; ">46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;&nbsp;5;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">47</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(color,&nbsp;-1,&nbsp;<span style="color: #0000FF; ">sizeof</span>(color));<br /><span style="color: #008080; ">48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(dfs(0,&nbsp;i))&nbsp;{<br /><span style="color: #008080; ">49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;=&nbsp;i;<br /><span style="color: #008080; ">50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(ans&nbsp;==&nbsp;1)&nbsp;printf("1&nbsp;channel&nbsp;needed.\n");<br /><span style="color: #008080; ">54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;printf("%d&nbsp;channels&nbsp;needed.\n",&nbsp;ans);<br /><span style="color: #008080; ">55</span>&nbsp;}<br /><span style="color: #008080; ">56</span>&nbsp;<br /><span style="color: #008080; ">57</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br /><span style="color: #008080; ">58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(~scanf("%d",&nbsp;&amp;n),&nbsp;n)&nbsp;{<br /><span style="color: #008080; ">59</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getchar();<br /><span style="color: #008080; ">60</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(maz,&nbsp;<span style="color: #0000FF; ">false</span>,&nbsp;<span style="color: #0000FF; ">sizeof</span>(maz));<br /><span style="color: #008080; ">61</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">62</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%c:",&nbsp;&amp;a);<br /><span style="color: #008080; ">63</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>((ch&nbsp;=&nbsp;getchar())&nbsp;!=&nbsp;10)&nbsp;{<br /><span style="color: #008080; ">64</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maz[a-'A'][ch-'A']&nbsp;=&nbsp;maz[ch-'A'][a-'A']&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">65</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;solve();<br /><span style="color: #008080; ">68</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">70</span>&nbsp;}<br /><span style="color: #008080; ">71</span>&nbsp;</div><img src ="http://www.cppblog.com/y346491470/aggbug/169031.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2012-03-26 17:27 <a href="http://www.cppblog.com/y346491470/articles/169031.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>poj 3921 Destroying the bus stations - 最小割最大流 + floyd预处理 + 拆点</title><link>http://www.cppblog.com/y346491470/articles/168271.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Sun, 18 Mar 2012 14:34:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/168271.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/168271.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/168271.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/168271.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/168271.html</trackback:ping><description><![CDATA[【题意】：给出n个城市，m条边，问最少摧毁多少个城市使得城市1到城市n的最短路大于k。<br /><br />【题解】：先用floyd求出点对的最短路，判断哪些点是在长度少于等于k的路上，然后把每个城市拆点，容量为1，加入原图上的边，容量为inf。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;求最小割即为答案。<br /><br />【代码】：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp; 1</span>&nbsp;#include&nbsp;"iostream"<br /><span style="color: #008080; ">&nbsp;&nbsp;2</span>&nbsp;#include&nbsp;"cstdio"<br /><span style="color: #008080; ">&nbsp;&nbsp;3</span>&nbsp;#include&nbsp;"cstring"<br /><span style="color: #008080; ">&nbsp;&nbsp;4</span>&nbsp;#include&nbsp;"algorithm"<br /><span style="color: #008080; ">&nbsp;&nbsp;5</span>&nbsp;#include&nbsp;"vector"<br /><span style="color: #008080; ">&nbsp;&nbsp;6</span>&nbsp;#include&nbsp;"queue"<br /><span style="color: #008080; ">&nbsp;&nbsp;7</span>&nbsp;#include&nbsp;"cmath"<br /><span style="color: #008080; ">&nbsp;&nbsp;8</span>&nbsp;#include&nbsp;"string"<br /><span style="color: #008080; ">&nbsp;&nbsp;9</span>&nbsp;#include&nbsp;"cctype"<br /><span style="color: #008080; ">&nbsp;10</span>&nbsp;#include&nbsp;"map"<br /><span style="color: #008080; ">&nbsp;11</span>&nbsp;#include&nbsp;"iomanip"<br /><span style="color: #008080; ">&nbsp;12</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008080; ">&nbsp;13</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;pb&nbsp;push_back<br /><span style="color: #008080; ">&nbsp;14</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;mp&nbsp;make_pair<br /><span style="color: #008080; ">&nbsp;15</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;fi&nbsp;first<br /><span style="color: #008080; ">&nbsp;16</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;se&nbsp;second<br /><span style="color: #008080; ">&nbsp;17</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1)<br /><span style="color: #008080; ">&nbsp;18</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;rc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1&nbsp;|&nbsp;1)<br /><span style="color: #008080; ">&nbsp;19</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lowbit(x)&nbsp;(x&nbsp;&amp;&nbsp;(-x))<br /><span style="color: #008080; ">&nbsp;20</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;ll&nbsp;long&nbsp;long<br /><span style="color: #008080; ">&nbsp;21</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxn&nbsp;1050<br /><span style="color: #008080; ">&nbsp;22</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxm&nbsp;1000050<br /><span style="color: #008080; ">&nbsp;23</span>&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;inf&nbsp;=&nbsp;1&nbsp;&lt;&lt;&nbsp;30;<br /><span style="color: #008080; ">&nbsp;24</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;maz[55][55];<br /><span style="color: #008080; ">&nbsp;25</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n,&nbsp;m,&nbsp;k;<br /><span style="color: #008080; ">&nbsp;26</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;s,&nbsp;t;<br /><span style="color: #008080; ">&nbsp;27</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;eh[maxn],&nbsp;low[maxn],&nbsp;dist[maxn],&nbsp;pre[maxn],&nbsp;cur[maxn],&nbsp;tot,&nbsp;cnt[maxn];<br /><span style="color: #008080; ">&nbsp;28</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;29</span>&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;Edge&nbsp;{<br /><span style="color: #008080; ">&nbsp;30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;v,&nbsp;cap,&nbsp;flow,&nbsp;next;<br /><span style="color: #008080; ">&nbsp;31</span>&nbsp;}et[maxm];<br /><span style="color: #008080; ">&nbsp;32</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;33</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;init()&nbsp;{<br /><span style="color: #008080; ">&nbsp;34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tot&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">&nbsp;35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(eh,&nbsp;-1,&nbsp;<span style="color: #0000FF; ">sizeof</span>(eh));<br /><span style="color: #008080; ">&nbsp;36</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;37</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;38</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;add(<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;v,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cap,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;flow)&nbsp;{<br /><span style="color: #008080; ">&nbsp;39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Edge&nbsp;e&nbsp;=&nbsp;{u,&nbsp;v,&nbsp;cap,&nbsp;flow,&nbsp;eh[u]};<br /><span style="color: #008080; ">&nbsp;40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;et[tot]&nbsp;=&nbsp;e;<br /><span style="color: #008080; ">&nbsp;41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eh[u]&nbsp;=&nbsp;tot++;<br /><span style="color: #008080; ">&nbsp;42</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;43</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;44</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;addedge(<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;v,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cap)&nbsp;{<br /><span style="color: #008080; ">&nbsp;45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add(u,&nbsp;v,&nbsp;cap,&nbsp;0),&nbsp;add(v,&nbsp;u,&nbsp;0,&nbsp;0);<br /><span style="color: #008080; ">&nbsp;46</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;47</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;48</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;floyd()&nbsp;{<br /><span style="color: #008080; ">&nbsp;49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;k&nbsp;=&nbsp;1;&nbsp;k&nbsp;&lt;=&nbsp;n;&nbsp;k++)&nbsp;{<br /><span style="color: #008080; ">&nbsp;50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">&nbsp;51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;1;&nbsp;j&nbsp;&lt;=&nbsp;n;&nbsp;j++)&nbsp;{<br /><span style="color: #008080; ">&nbsp;52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(maz[i][k]&nbsp;!=&nbsp;inf&nbsp;&amp;&amp;&nbsp;maz[k][j]&nbsp;!=&nbsp;inf)<br /><span style="color: #008080; ">&nbsp;53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maz[i][j]&nbsp;=&nbsp;min(maz[i][j],&nbsp;maz[i][k]&nbsp;+&nbsp;maz[k][j]);<br /><span style="color: #008080; ">&nbsp;54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;55</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;56</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;57</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;58</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;59</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;isap(<span style="color: #0000FF; ">int</span>&nbsp;s,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;t,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n){<br /><span style="color: #008080; ">&nbsp;60</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;v,&nbsp;now,&nbsp;flow&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">&nbsp;61</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(dist,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(dist));&nbsp;<br /><span style="color: #008080; ">&nbsp;62</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(low,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(low));<br /><span style="color: #008080; ">&nbsp;63</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(cnt,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(cnt));<br /><span style="color: #008080; ">&nbsp;64</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(u&nbsp;=&nbsp;0&nbsp;;&nbsp;u&nbsp;&lt;=&nbsp;n&nbsp;;&nbsp;u&nbsp;++)&nbsp;cur[u]&nbsp;=&nbsp;eh[u];<br /><span style="color: #008080; ">&nbsp;65</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;low[s]&nbsp;=&nbsp;inf,&nbsp;cnt[0]&nbsp;=&nbsp;n,&nbsp;u&nbsp;=&nbsp;s;<br /><span style="color: #008080; ">&nbsp;66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(dist[s]&nbsp;&lt;&nbsp;n)&nbsp;{<br /><span style="color: #008080; ">&nbsp;67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(now&nbsp;=&nbsp;cur[u];&nbsp;now&nbsp;!=&nbsp;-1;&nbsp;now&nbsp;=&nbsp;et[now].next)<br /><span style="color: #008080; ">&nbsp;68</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(et[now].cap&nbsp;-&nbsp;et[now].flow&nbsp;&amp;&amp;&nbsp;dist[u]&nbsp;==&nbsp;dist[&nbsp;v&nbsp;=&nbsp;et[now].v&nbsp;]&nbsp;+&nbsp;1&nbsp;)&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">&nbsp;69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(now&nbsp;!=&nbsp;-1)&nbsp;{<br /><span style="color: #008080; ">&nbsp;70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cur[u]&nbsp;=&nbsp;pre[v]&nbsp;=&nbsp;now;<br /><span style="color: #008080; ">&nbsp;71</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;low[v]&nbsp;=&nbsp;min(et[now].cap&nbsp;-&nbsp;et[now].flow,&nbsp;low[u]);<br /><span style="color: #008080; ">&nbsp;72</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u&nbsp;=&nbsp;v;<br /><span style="color: #008080; ">&nbsp;73</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(u&nbsp;==&nbsp;t)&nbsp;{<br /><span style="color: #008080; ">&nbsp;74</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(;&nbsp;u&nbsp;!=&nbsp;s;&nbsp;u&nbsp;=&nbsp;et[pre[u]].u){<br /><span style="color: #008080; ">&nbsp;75</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;et[pre[u]].flow&nbsp;+=&nbsp;low[t];<br /><span style="color: #008080; ">&nbsp;76</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;et[pre[u]^1].flow&nbsp;-=&nbsp;low[t];<br /><span style="color: #008080; ">&nbsp;77</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;78</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flow&nbsp;+=&nbsp;low[t];&nbsp;low[s]&nbsp;=&nbsp;inf;<br /><span style="color: #008080; ">&nbsp;79</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;80</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br /><span style="color: #008080; ">&nbsp;81</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(--cnt[dist[u]]&nbsp;==&nbsp;0)&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">&nbsp;82</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[u]&nbsp;=&nbsp;n,&nbsp;cur[u]&nbsp;=&nbsp;eh[u];<br /><span style="color: #008080; ">&nbsp;83</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(now&nbsp;=&nbsp;eh[u];&nbsp;now&nbsp;!=&nbsp;-1;&nbsp;now&nbsp;=&nbsp;et[now].next)<br /><span style="color: #008080; ">&nbsp;84</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(et[now].cap&nbsp;-&nbsp;et[now].flow&nbsp;&amp;&amp;&nbsp;dist[u]&nbsp;&gt;&nbsp;dist[et[now].v]&nbsp;+&nbsp;1)<br /><span style="color: #008080; ">&nbsp;85</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[u]&nbsp;=&nbsp;dist[&nbsp;et[now].v&nbsp;]&nbsp;+&nbsp;1;<br /><span style="color: #008080; ">&nbsp;86</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnt[dist[u]]++;<br /><span style="color: #008080; ">&nbsp;87</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(u&nbsp;!=&nbsp;s)&nbsp;u&nbsp;=&nbsp;et[pre[u]].u;<br /><span style="color: #008080; ">&nbsp;88</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;89</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;90</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;flow;<br /><span style="color: #008080; ">&nbsp;91</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;92</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;93</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br /><span style="color: #008080; ">&nbsp;94</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;v;<br /><span style="color: #008080; ">&nbsp;95</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(~scanf("%d%d%d",&nbsp;&amp;n,&nbsp;&amp;m,&nbsp;&amp;k))&nbsp;{<br /><span style="color: #008080; ">&nbsp;96</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!n)&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">&nbsp;97</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;=&nbsp;1,&nbsp;t&nbsp;=&nbsp;n;<br /><span style="color: #008080; ">&nbsp;98</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();<br /><span style="color: #008080; ">&nbsp;99</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;55;&nbsp;i++)<br /><span style="color: #008080; ">100</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;0;&nbsp;j&nbsp;&lt;&nbsp;55;&nbsp;j++)<br /><span style="color: #008080; ">101</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maz[i][j]&nbsp;=&nbsp;inf;<br /><span style="color: #008080; ">102</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;m;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">103</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d",&nbsp;&amp;u,&nbsp;&amp;v);<br /><span style="color: #008080; ">104</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maz[u][v]&nbsp;=&nbsp;1;<br /><span style="color: #008080; ">105</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">106</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;floyd();<br /><span style="color: #008080; ">107</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;2;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">108</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(maz[s][i]&nbsp;+&nbsp;maz[i][t]&nbsp;&lt;=&nbsp;k)&nbsp;{<br /><span style="color: #008080; ">109</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addedge(i,&nbsp;i&nbsp;+&nbsp;n,&nbsp;1);<br /><span style="color: #008080; ">110</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">111</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">112</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">113</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;1;&nbsp;j&nbsp;&lt;=&nbsp;n;&nbsp;j++)&nbsp;{<br /><span style="color: #008080; ">114</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(maz[i][j]&nbsp;==&nbsp;1)&nbsp;addedge(i&nbsp;+&nbsp;n,&nbsp;j,&nbsp;inf);<br /><span style="color: #008080; ">115</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">116</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">117</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;ans&nbsp;=&nbsp;isap(s&nbsp;+&nbsp;n,&nbsp;t,&nbsp;2&nbsp;*&nbsp;n&nbsp;-&nbsp;2);<br /><span style="color: #008080; ">118</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;&lt;&lt;&nbsp;ans&nbsp;&lt;&lt;&nbsp;endl;<br /><span style="color: #008080; ">119</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">120</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">121</span>&nbsp;}<br /><span style="color: #008080; ">122</span>&nbsp;</div><img src ="http://www.cppblog.com/y346491470/aggbug/168271.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2012-03-18 22:34 <a href="http://www.cppblog.com/y346491470/articles/168271.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>poj 1797 Heavy Transportation - 最短路 + dp</title><link>http://www.cppblog.com/y346491470/articles/167414.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Thu, 08 Mar 2012 08:46:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/167414.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/167414.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/167414.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/167414.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/167414.html</trackback:ping><description><![CDATA[<div>【题意】：求城市1到城市n可行路径上最小值的最大值。<br /><br />【题解】：最短路变形，加上一点dp思想。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;把dist[]数组存储的东西改一下即可。<br /><br />【代码】：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;#include&nbsp;"iostream"<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;#include&nbsp;"cstdio"<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;#include&nbsp;"cstring"<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;#include&nbsp;"algorithm"<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;#include&nbsp;"vector"<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;#include&nbsp;"queue"<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;#include&nbsp;"cmath"<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;#include&nbsp;"string"<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;#include&nbsp;"cctype"<br /><span style="color: #008080; ">10</span>&nbsp;#include&nbsp;"map"<br /><span style="color: #008080; ">11</span>&nbsp;#include&nbsp;"iomanip"<br /><span style="color: #008080; ">12</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008080; ">13</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;pb&nbsp;push_back<br /><span style="color: #008080; ">14</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1)<br /><span style="color: #008080; ">15</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;rc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1&nbsp;|&nbsp;1)<br /><span style="color: #008080; ">16</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lowbit(x)&nbsp;(x&nbsp;&amp;&nbsp;(-x))<br /><span style="color: #008080; ">17</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;ll&nbsp;long&nbsp;long<br /><span style="color: #008080; ">18</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxn&nbsp;1050<br /><span style="color: #008080; ">19</span>&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;inf&nbsp;=&nbsp;1&nbsp;&lt;&lt;&nbsp;30;<br /><span style="color: #008080; ">20</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n,&nbsp;m;<br /><span style="color: #008080; ">21</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;maz[maxn][maxn];<br /><span style="color: #008080; ">22</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;dist[maxn];<br /><span style="color: #008080; ">23</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;visit[maxn];<br /><span style="color: #008080; ">24</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;prim(<span style="color: #0000FF; ">int</span>&nbsp;s)&nbsp;{<br /><span style="color: #008080; ">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(visit,&nbsp;<span style="color: #0000FF; ">false</span>,&nbsp;<span style="color: #0000FF; ">sizeof</span>(visit));<br /><span style="color: #008080; ">26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(dist,&nbsp;-1,&nbsp;<span style="color: #0000FF; ">sizeof</span>(dist));<br /><span style="color: #008080; ">27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[s]&nbsp;=&nbsp;inf;<br /><span style="color: #008080; ">28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(1)&nbsp;{<br /><span style="color: #008080; ">29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u&nbsp;=&nbsp;-1;<br /><span style="color: #008080; ">30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)<br /><span style="color: #008080; ">31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!visit[i]&nbsp;&amp;&amp;&nbsp;(u&nbsp;==&nbsp;-1&nbsp;||&nbsp;dist[i]&nbsp;&gt;&nbsp;dist[u]))&nbsp;<br /><span style="color: #008080; ">32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u&nbsp;=&nbsp;i;<br /><span style="color: #008080; ">33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(u&nbsp;==&nbsp;-1)&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visit[u]&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!visit[i]&nbsp;&amp;&amp;&nbsp;maz[u][i]&nbsp;!=&nbsp;-1)<br /><span style="color: #008080; ">37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[i]&nbsp;=&nbsp;max(dist[i],&nbsp;min(dist[u],&nbsp;maz[u][i]));<br /><span style="color: #008080; ">38</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">40</span>&nbsp;}<br /><span style="color: #008080; ">41</span>&nbsp;<br /><span style="color: #008080; ">42</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br /><span style="color: #008080; ">43</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;T,&nbsp;Case&nbsp;=&nbsp;1;<br /><span style="color: #008080; ">44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;v,&nbsp;w;<br /><span style="color: #008080; ">45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&amp;T);<br /><span style="color: #008080; ">46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(T--)&nbsp;{<br /><span style="color: #008080; ">47</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(maz,&nbsp;-1,&nbsp;<span style="color: #0000FF; ">sizeof</span>(maz));<br /><span style="color: #008080; ">48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d",&nbsp;&amp;n,&nbsp;&amp;m);<br /><span style="color: #008080; ">49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;m;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d%d",&nbsp;&amp;u,&nbsp;&amp;v,&nbsp;&amp;w);<br /><span style="color: #008080; ">51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maz[u][v]&nbsp;=&nbsp;maz[v][u]&nbsp;=&nbsp;w;<br /><span style="color: #008080; ">52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prim(1);<br /><span style="color: #008080; ">54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("Scenario&nbsp;#%d:\n%d\n\n",&nbsp;Case++,&nbsp;dist[n]);<br /><span style="color: #008080; ">55</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">56</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">57</span>&nbsp;}<br /><span style="color: #008080; ">58</span>&nbsp;</div></div><img src ="http://www.cppblog.com/y346491470/aggbug/167414.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2012-03-08 16:46 <a href="http://www.cppblog.com/y346491470/articles/167414.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>poj 2728 Desert King - 最优比率生成树 + 01分数规划 + Dinkelbach</title><link>http://www.cppblog.com/y346491470/articles/166571.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Sun, 26 Feb 2012 08:49:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/166571.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/166571.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/166571.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/166571.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/166571.html</trackback:ping><description><![CDATA[【题意】：求最小比率生成树。<br /><br />【题解】：最小比率生成树和01分数规划都是从这里学到的。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;最小比率生成树的模型其实就是01分数规划，关于01分数规划的资料，网上一大堆。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;简单说下做法，就是构造一个01分数规划的式子，然后变形，利用MST求取当前的最小值。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;然后利用二分或者Dinkelbach逼近到最优解即为答案。<br /><br />【代码】：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;#include&nbsp;"iostream"<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;#include&nbsp;"cstdio"<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;#include&nbsp;"cstring"<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;#include&nbsp;"algorithm"<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;#include&nbsp;"vector"<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;#include&nbsp;"queue"<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;#include&nbsp;"cmath"<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;#include&nbsp;"string"<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;#include&nbsp;"cctype"<br /><span style="color: #008080; ">10</span>&nbsp;#include&nbsp;"map"<br /><span style="color: #008080; ">11</span>&nbsp;#include&nbsp;"iomanip"<br /><span style="color: #008080; ">12</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008080; ">13</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;pb&nbsp;push_back<br /><span style="color: #008080; ">14</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1)<br /><span style="color: #008080; ">15</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;rc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1&nbsp;|&nbsp;1)<br /><span style="color: #008080; ">16</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lowbit(x)&nbsp;(x&nbsp;&amp;&nbsp;(-x))<br /><span style="color: #008080; ">17</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;ll&nbsp;long&nbsp;long<br /><span style="color: #008080; ">18</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxn&nbsp;1050<br /><span style="color: #008080; ">19</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;eps&nbsp;1e-6<br /><span style="color: #008080; ">20</span>&nbsp;<br /><span style="color: #008080; ">21</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n;<br /><span style="color: #008080; ">22</span>&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;d[maxn][maxn];<br /><span style="color: #008080; ">23</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cost[maxn][maxn];<br /><span style="color: #008080; ">24</span>&nbsp;<br /><span style="color: #008080; ">25</span>&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;Point&nbsp;{<br /><span style="color: #008080; ">26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;x,&nbsp;y;<br /><span style="color: #008080; ">27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;z;<br /><span style="color: #008080; ">28</span>&nbsp;}p[maxn];<br /><span style="color: #008080; ">29</span>&nbsp;<br /><span style="color: #008080; ">30</span>&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;getdist(Point&nbsp;&amp;a,&nbsp;Point&nbsp;&amp;b)&nbsp;{<br /><span style="color: #008080; ">31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;sqrt((a.x&nbsp;-&nbsp;b.x)&nbsp;*&nbsp;(a.x&nbsp;-&nbsp;b.x)&nbsp;+&nbsp;(a.y&nbsp;-&nbsp;b.y)&nbsp;*&nbsp;(a.y&nbsp;-&nbsp;b.y));<br /><span style="color: #008080; ">32</span>&nbsp;}<br /><span style="color: #008080; ">33</span>&nbsp;<br /><span style="color: #008080; ">34</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;getcost(Point&nbsp;&amp;a,&nbsp;Point&nbsp;&amp;b)&nbsp;{<br /><span style="color: #008080; ">35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;abs(a.z&nbsp;-&nbsp;b.z);<br /><span style="color: #008080; ">36</span>&nbsp;}<br /><span style="color: #008080; ">37</span>&nbsp;<br /><span style="color: #008080; ">38</span>&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;prim(<span style="color: #0000FF; ">int</span>&nbsp;s,&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;&amp;l)&nbsp;{<br /><span style="color: #008080; ">39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;anslen&nbsp;=&nbsp;0.0,&nbsp;anscost&nbsp;=&nbsp;0.0;<br /><span style="color: #008080; ">40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;visit[maxn];<br /><span style="color: #008080; ">41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;dist[maxn],&nbsp;tmp,&nbsp;ans&nbsp;=&nbsp;0.0;<br /><span style="color: #008080; ">42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;pre[maxn];<br /><span style="color: #008080; ">43</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)&nbsp;visit[i]&nbsp;=&nbsp;<span style="color: #0000FF; ">false</span>,&nbsp;dist[i]&nbsp;=&nbsp;1e30;<br /><span style="color: #008080; ">44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[s]&nbsp;=&nbsp;0.0,&nbsp;pre[s]&nbsp;=&nbsp;s;<br /><span style="color: #008080; ">45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(1)&nbsp;{<br /><span style="color: #008080; ">46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u&nbsp;=&nbsp;-1;<br /><span style="color: #008080; ">47</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!visit[i]&nbsp;&amp;&amp;&nbsp;(u&nbsp;==&nbsp;-1&nbsp;||&nbsp;dist[i]&nbsp;&lt;&nbsp;dist[u]))&nbsp;u&nbsp;=&nbsp;i;<br /><span style="color: #008080; ">49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(u&nbsp;==&nbsp;-1)&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;anscost&nbsp;+=&nbsp;cost[pre[u]][u];<br /><span style="color: #008080; ">52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;anslen&nbsp;+=&nbsp;d[pre[u]][u];<br /><span style="color: #008080; ">53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;+=&nbsp;dist[u];<br /><span style="color: #008080; ">54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visit[u]&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">55</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">56</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!visit[i]&nbsp;&amp;&amp;&nbsp;(tmp&nbsp;=&nbsp;1.0&nbsp;*&nbsp;cost[u][i]&nbsp;-&nbsp;l&nbsp;*&nbsp;d[u][i])&nbsp;&lt;&nbsp;dist[i])<br /><span style="color: #008080; ">57</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[i]&nbsp;=&nbsp;tmp,&nbsp;pre[i]&nbsp;=&nbsp;u;<br /><span style="color: #008080; ">58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">59</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">60</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l&nbsp;=&nbsp;anscost&nbsp;/&nbsp;anslen;<br /><span style="color: #008080; ">61</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;ans;<br /><span style="color: #008080; ">62</span>&nbsp;}<br /><span style="color: #008080; ">63</span>&nbsp;<br /><span style="color: #008080; ">64</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;solve()&nbsp;{<br /><span style="color: #008080; ">65</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;ans=&nbsp;0.0,&nbsp;tmp&nbsp;=&nbsp;0.0;<br /><span style="color: #008080; ">66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(1)&nbsp;{<br /><span style="color: #008080; ">67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;tmp&nbsp;=&nbsp;prim(0,&nbsp;ans);<br /><span style="color: #008080; ">68</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(fabs(tmp)&nbsp;&lt;&nbsp;eps)&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%.3f\n",&nbsp;ans);<br /><span style="color: #008080; ">71</span>&nbsp;}<br /><span style="color: #008080; ">72</span>&nbsp;<br /><span style="color: #008080; ">73</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br /><span style="color: #008080; ">74</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(scanf("%d",&nbsp;&amp;n)&nbsp;&amp;&amp;&nbsp;n)&nbsp;{<br /><span style="color: #008080; ">75</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">76</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%lf%lf%d",&nbsp;&amp;p[i].x,&nbsp;&amp;p[i].y,&nbsp;&amp;p[i].z);<br /><span style="color: #008080; ">77</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;0;&nbsp;j&nbsp;&lt;&nbsp;i;&nbsp;j++)&nbsp;{<br /><span style="color: #008080; ">78</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d[i][j]&nbsp;=&nbsp;d[j][i]&nbsp;=&nbsp;getdist(p[i],&nbsp;p[j]);<br /><span style="color: #008080; ">79</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cost[i][j]&nbsp;=&nbsp;cost[j][i]&nbsp;=&nbsp;getcost(p[i],&nbsp;p[j]);<br /><span style="color: #008080; ">80</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">81</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">82</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;solve();<br /><span style="color: #008080; ">83</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">84</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">85</span>&nbsp;}<br /><span style="color: #008080; ">86</span>&nbsp;</div><img src ="http://www.cppblog.com/y346491470/aggbug/166571.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2012-02-26 16:49 <a href="http://www.cppblog.com/y346491470/articles/166571.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hdoj 4160 Dolls - 图的最小路径覆盖 + 二分图匹配</title><link>http://www.cppblog.com/y346491470/articles/165935.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Sat, 18 Feb 2012 15:05:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/165935.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/165935.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/165935.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/165935.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/165935.html</trackback:ping><description><![CDATA[【题意】：给出n个箱子，每个箱子有三个值w,l,h。如果一个箱子的这三个值严格小于另一个箱子的三个值，那么可以把这个箱子放在另一个箱子里面。每个箱子里面最多只能放一个箱子，问最小情况下还有多少个箱子。<br /><br />【题解】：一开始直接上排序加贪心，然后发现有明显的bug。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;考虑排序后dp，发现是个2d的最长上升子序列，不过难以实现。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;无奈之下请教3x，原来是个经典问题，最小路径覆盖。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;最小路径覆盖在二分图上满足：最小路径覆盖 = 顶点数 - 最大匹配。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;由于原图不是二分图，需实行转换，只需拆点即可。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;最后直接上匈牙利即可。<br /><br />【代码】：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp; 1</span>&nbsp;#include&nbsp;"iostream"<br /><span style="color: #008080; ">&nbsp;&nbsp;2</span>&nbsp;#include&nbsp;"cstdio"<br /><span style="color: #008080; ">&nbsp;&nbsp;3</span>&nbsp;#include&nbsp;"cstring"<br /><span style="color: #008080; ">&nbsp;&nbsp;4</span>&nbsp;#include&nbsp;"algorithm"<br /><span style="color: #008080; ">&nbsp;&nbsp;5</span>&nbsp;#include&nbsp;"vector"<br /><span style="color: #008080; ">&nbsp;&nbsp;6</span>&nbsp;#include&nbsp;"queue"<br /><span style="color: #008080; ">&nbsp;&nbsp;7</span>&nbsp;#include&nbsp;"cmath"<br /><span style="color: #008080; ">&nbsp;&nbsp;8</span>&nbsp;#include&nbsp;"string"<br /><span style="color: #008080; ">&nbsp;&nbsp;9</span>&nbsp;#include&nbsp;"cctype"<br /><span style="color: #008080; ">&nbsp;10</span>&nbsp;#include&nbsp;"map"<br /><span style="color: #008080; ">&nbsp;11</span>&nbsp;#include&nbsp;"iomanip"<br /><span style="color: #008080; ">&nbsp;12</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008080; ">&nbsp;13</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;pb&nbsp;push_back<br /><span style="color: #008080; ">&nbsp;14</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1)<br /><span style="color: #008080; ">&nbsp;15</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;rc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1&nbsp;|&nbsp;1)<br /><span style="color: #008080; ">&nbsp;16</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lowbit(x)&nbsp;(x&nbsp;&amp;&nbsp;(-x))<br /><span style="color: #008080; ">&nbsp;17</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;ll&nbsp;long&nbsp;long<br /><span style="color: #008080; ">&nbsp;18</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxn&nbsp;1500&nbsp;<br /><span style="color: #008080; ">&nbsp;19</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxm&nbsp;1000500<br /><span style="color: #008080; ">&nbsp;20</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n;<br /><span style="color: #008080; ">&nbsp;21</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;eh[maxn],&nbsp;tot;<br /><span style="color: #008080; ">&nbsp;22</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;visit[maxn];<br /><span style="color: #008080; ">&nbsp;23</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;match[maxn];<br /><span style="color: #008080; ">&nbsp;24</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;25</span>&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;Edge&nbsp;{<br /><span style="color: #008080; ">&nbsp;26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;v,&nbsp;next;<br /><span style="color: #008080; ">&nbsp;27</span>&nbsp;}et[maxm];<br /><span style="color: #008080; ">&nbsp;28</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;29</span>&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;Point&nbsp;{<br /><span style="color: #008080; ">&nbsp;30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;w,&nbsp;l,&nbsp;h;<br /><span style="color: #008080; ">&nbsp;31</span>&nbsp;}p[maxn];<br /><span style="color: #008080; ">&nbsp;32</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;33</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;init()&nbsp;{<br /><span style="color: #008080; ">&nbsp;34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tot&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">&nbsp;35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(eh,&nbsp;-1,&nbsp;<span style="color: #0000FF; ">sizeof</span>(eh));<br /><span style="color: #008080; ">&nbsp;36</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;37</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;38</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;addedge(<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;v)&nbsp;{<br /><span style="color: #008080; ">&nbsp;39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Edge&nbsp;e&nbsp;=&nbsp;{u,&nbsp;v,&nbsp;eh[u]};<br /><span style="color: #008080; ">&nbsp;40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;et[tot]&nbsp;=&nbsp;e;<br /><span style="color: #008080; ">&nbsp;41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eh[u]&nbsp;=&nbsp;tot++;<br /><span style="color: #008080; ">&nbsp;42</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;43</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;44</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;dfs(<span style="color: #0000FF; ">int</span>&nbsp;u)&nbsp;{<br /><span style="color: #008080; ">&nbsp;45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;eh[u];&nbsp;i&nbsp;!=&nbsp;-1;&nbsp;i&nbsp;=&nbsp;et[i].next)&nbsp;{<br /><span style="color: #008080; ">&nbsp;46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;v&nbsp;=&nbsp;et[i].v;<br /><span style="color: #008080; ">&nbsp;47</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!visit[v])&nbsp;{<br /><span style="color: #008080; ">&nbsp;48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visit[v]&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">&nbsp;49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(match[v]&nbsp;==&nbsp;-1&nbsp;||&nbsp;dfs(match[v]))&nbsp;{<br /><span style="color: #008080; ">&nbsp;50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;match[v]&nbsp;=&nbsp;u;<br /><span style="color: #008080; ">&nbsp;51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">&nbsp;52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;55</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br /><span style="color: #008080; ">&nbsp;56</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;57</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;58</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;Match()&nbsp;{<span style="color: #008000; ">//</span><span style="color: #008000; ">二分图匹配</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;59</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cnt&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">&nbsp;60</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(match,&nbsp;-1,&nbsp;<span style="color: #0000FF; ">sizeof</span>&nbsp;(match));<br /><span style="color: #008080; ">&nbsp;61</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;u&nbsp;=&nbsp;1;&nbsp;u&nbsp;&lt;=&nbsp;2&nbsp;*&nbsp;n;&nbsp;u++)&nbsp;{<br /><span style="color: #008080; ">&nbsp;62</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(visit,&nbsp;<span style="color: #0000FF; ">false</span>,&nbsp;<span style="color: #0000FF; ">sizeof</span>&nbsp;(visit));<br /><span style="color: #008080; ">&nbsp;63</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(dfs(u))&nbsp;cnt++;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">每找到一条增广路，匹配数+1</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;64</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;65</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;cnt;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">返回最大匹配数</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;66</span>&nbsp;<span style="color: #008000; "></span>}<br /><span style="color: #008080; ">&nbsp;67</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;68</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;check(<span style="color: #0000FF; ">const</span>&nbsp;Point&nbsp;&amp;a,&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;Point&nbsp;&amp;b)&nbsp;{<br /><span style="color: #008080; ">&nbsp;69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;a.h&nbsp;&lt;&nbsp;b.h&nbsp;&amp;&amp;&nbsp;a.l&nbsp;&lt;&nbsp;b.l&nbsp;&amp;&amp;&nbsp;a.w&nbsp;&lt;&nbsp;b.w;<br /><span style="color: #008080; ">&nbsp;70</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;71</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;72</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;build()&nbsp;{<br /><span style="color: #008080; ">&nbsp;73</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();<br /><span style="color: #008080; ">&nbsp;74</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">&nbsp;75</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;0;&nbsp;j&nbsp;&lt;&nbsp;n;&nbsp;j++)&nbsp;{<br /><span style="color: #008080; ">&nbsp;76</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(check(p[i],&nbsp;p[j]))&nbsp;addedge(i&nbsp;+&nbsp;n,&nbsp;j);<br /><span style="color: #008080; ">&nbsp;77</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;78</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;79</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;80</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;81</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br /><span style="color: #008080; ">&nbsp;82</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(~scanf("%d",&nbsp;&amp;n)&nbsp;&amp;&amp;&nbsp;n)&nbsp;{<br /><span style="color: #008080; ">&nbsp;83</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)&nbsp;scanf("%d%d%d",&nbsp;&amp;p[i].w,&nbsp;&amp;p[i].l,&nbsp;&amp;p[i].h);<br /><span style="color: #008080; ">&nbsp;84</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;build();<br /><span style="color: #008080; ">&nbsp;85</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",&nbsp;n&nbsp;-&nbsp;Match());<br /><span style="color: #008080; ">&nbsp;86</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;87</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">&nbsp;88</span>&nbsp;}<br /><br /></div><img src ="http://www.cppblog.com/y346491470/aggbug/165935.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2012-02-18 23:05 <a href="http://www.cppblog.com/y346491470/articles/165935.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>poj 1330 Nearest Common Ancestors - LCA + Tarjan算法</title><link>http://www.cppblog.com/y346491470/articles/164579.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Fri, 27 Jan 2012 08:35:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/164579.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/164579.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/164579.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/164579.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/164579.html</trackback:ping><description><![CDATA[【题意】：求一棵树上的最近公共祖先。<br /><br />【题解】：模板题。<br /><br />【代码】：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;#include&nbsp;"iostream"<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;#include&nbsp;"cstdio"<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;#include&nbsp;"cstring"<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;#include&nbsp;"algorithm"<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;#include&nbsp;"vector"<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;#include&nbsp;"queue"<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;#include&nbsp;"cmath"<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;#include&nbsp;"string"<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;#include&nbsp;"cctype"<br /><span style="color: #008080; ">10</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008080; ">11</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;pb&nbsp;push_back<br /><span style="color: #008080; ">12</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1)<br /><span style="color: #008080; ">13</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;rc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1&nbsp;|&nbsp;1)<br /><span style="color: #008080; ">14</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lowbit(x)&nbsp;(x&nbsp;&amp;&nbsp;(-x))<br /><span style="color: #008080; ">15</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;ll&nbsp;long&nbsp;long<br /><span style="color: #008080; ">16</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxn&nbsp;10005<br /><span style="color: #008080; ">17</span>&nbsp;vector&lt;<span style="color: #0000FF; ">int</span>&gt;&nbsp;tree[maxn],&nbsp;Q[maxn];<br /><span style="color: #008080; ">18</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;<span style="color: #0000FF; ">in</span>[maxn],&nbsp;n;<br /><span style="color: #008080; ">19</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;visit[maxn];<br /><span style="color: #008080; ">20</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;fa[maxn];<br /><span style="color: #008080; ">21</span>&nbsp;<br /><span style="color: #008080; ">22</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;init()&nbsp;{<br /><span style="color: #008080; ">23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)&nbsp;fa[i]&nbsp;=&nbsp;i,&nbsp;tree[i].clear(),&nbsp;Q[i].clear();<br /><span style="color: #008080; ">24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(visit,&nbsp;<span style="color: #0000FF; ">false</span>,&nbsp;<span style="color: #0000FF; ">sizeof</span>(visit));<br /><span style="color: #008080; ">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(<span style="color: #0000FF; ">in</span>,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(<span style="color: #0000FF; ">in</span>));<br /><span style="color: #008080; ">26</span>&nbsp;}<br /><span style="color: #008080; ">27</span>&nbsp;<br /><span style="color: #008080; ">28</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;find(<span style="color: #0000FF; ">int</span>&nbsp;x)&nbsp;{<br /><span style="color: #008080; ">29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(x&nbsp;==&nbsp;fa[x])&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;x;<br /><span style="color: #008080; ">30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;fa[x]&nbsp;=&nbsp;find(fa[x]);<br /><span style="color: #008080; ">31</span>&nbsp;}<br /><span style="color: #008080; ">32</span>&nbsp;<br /><span style="color: #008080; ">33</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;un(<span style="color: #0000FF; ">int</span>&nbsp;a,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;b)&nbsp;{<br /><span style="color: #008080; ">34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;find(a),&nbsp;b&nbsp;=&nbsp;find(b);<br /><span style="color: #008080; ">35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(a&nbsp;==&nbsp;b)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br /><span style="color: #008080; ">36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fa[b]&nbsp;=&nbsp;a;<br /><span style="color: #008080; ">37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">38</span>&nbsp;}<br /><span style="color: #008080; ">39</span>&nbsp;<br /><span style="color: #008080; ">40</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Tarjan(<span style="color: #0000FF; ">int</span>&nbsp;u)&nbsp;{<br /><span style="color: #008080; ">41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;size&nbsp;=&nbsp;tree[u].size();<br /><span style="color: #008080; ">42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;size;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">43</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tarjan(tree[u][i]);<br /><span style="color: #008080; ">44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;un(u,&nbsp;tree[u][i]);<br /><span style="color: #008080; ">45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visit[u]&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>,&nbsp;size&nbsp;=&nbsp;Q[u].size();<br /><span style="color: #008080; ">47</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;size;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(visit[Q[u][i]])&nbsp;{<br /><span style="color: #008080; ">49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",&nbsp;find(Q[u][i]));<br /><span style="color: #008080; ">50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>;<br /><span style="color: #008080; ">51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">53</span>&nbsp;}<br /><span style="color: #008080; ">54</span>&nbsp;<br /><span style="color: #008080; ">55</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br /><span style="color: #008080; ">56</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;T,&nbsp;u,&nbsp;v;<br /><span style="color: #008080; ">57</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&amp;T);<br /><span style="color: #008080; ">58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(T--)&nbsp;{<br /><span style="color: #008080; ">59</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&amp;n);<br /><span style="color: #008080; ">60</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();<br /><span style="color: #008080; ">61</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;n&nbsp;-&nbsp;1;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">62</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d",&nbsp;&amp;u,&nbsp;&amp;v);<br /><span style="color: #008080; ">63</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[u].pb(v);<br /><span style="color: #008080; ">64</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">in</span>[v]++;<br /><span style="color: #008080; ">65</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d",&nbsp;&amp;u,&nbsp;&amp;v);<br /><span style="color: #008080; ">67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Q[u].pb(v),&nbsp;Q[v].pb(u);<br /><span style="color: #008080; ">68</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;root&nbsp;=&nbsp;-1;<br /><span style="color: #008080; ">69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(<span style="color: #0000FF; ">in</span>[i]&nbsp;==&nbsp;0)&nbsp;{<br /><span style="color: #008080; ">71</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;=&nbsp;i;<br /><span style="color: #008080; ">72</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">73</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">74</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">75</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tarjan(root);<br /><span style="color: #008080; ">76</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">77</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">78</span>&nbsp;}<br /><span style="color: #008080; ">79</span>&nbsp;</div><img src ="http://www.cppblog.com/y346491470/aggbug/164579.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2012-01-27 16:35 <a href="http://www.cppblog.com/y346491470/articles/164579.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>poj 1679 The Unique MST - 次小生成树</title><link>http://www.cppblog.com/y346491470/articles/164542.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Thu, 26 Jan 2012 08:16:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/164542.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/164542.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/164542.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/164542.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/164542.html</trackback:ping><description><![CDATA[【题意】：问图中的最小生成树是否唯一。<br /><br />【题解】：先求出最小生成树，再求次小生成树，如果最小生成树 == 次小生成树，则不唯一；否则，唯一。纯粹模板题。<br /><br />【代码】：<br /><div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; border-image: initial; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;#include&nbsp;"iostream"<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;#include&nbsp;"cstdio"<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;#include&nbsp;"cstring"<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;#include&nbsp;"algorithm"<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;#include&nbsp;"vector"<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;#include&nbsp;"queue"<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;#include&nbsp;"cmath"<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;#include&nbsp;"string"<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;#include&nbsp;"cctype"<br /><span style="color: #008080; ">10</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008080; ">11</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;pb&nbsp;push_back<br /><span style="color: #008080; ">12</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1)<br /><span style="color: #008080; ">13</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;rc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1&nbsp;|&nbsp;1)<br /><span style="color: #008080; ">14</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lowbit(x)&nbsp;(x&nbsp;&amp;&nbsp;(-x))<br /><span style="color: #008080; ">15</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;ll&nbsp;long&nbsp;long<br /><span style="color: #008080; ">16</span>&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;inf&nbsp;=&nbsp;1&nbsp;&lt;&lt;&nbsp;30;<br /><span style="color: #008080; ">17</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxn&nbsp;150<br /><span style="color: #008080; ">18</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;maz[maxn][maxn],&nbsp;path[maxn][maxn];<br /><span style="color: #008080; ">19</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;visit[maxn];<br /><span style="color: #008080; ">20</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;dist[maxn],&nbsp;pre[maxn],&nbsp;stack[maxn];<br /><span style="color: #008080; ">21</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n,&nbsp;m;<br /><span style="color: #008080; ">22</span>&nbsp;<br /><span style="color: #008080; ">23</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;init()&nbsp;{<br /><span style="color: #008080; ">24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)&nbsp;<br /><span style="color: #008080; ">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;1;&nbsp;j&nbsp;&lt;=&nbsp;n;&nbsp;j++)&nbsp;<br /><span style="color: #008080; ">26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maz[i][j]&nbsp;=&nbsp;inf,&nbsp;path[i][j]&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">27</span>&nbsp;}<br /><span style="color: #008080; ">28</span>&nbsp;<br /><span style="color: #008080; ">29</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;Prim(<span style="color: #0000FF; ">int</span>&nbsp;s)&nbsp;{<br /><span style="color: #008080; ">30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)&nbsp;dist[i]&nbsp;=&nbsp;maz[s][i],&nbsp;visit[i]&nbsp;=&nbsp;0,&nbsp;pre[i]&nbsp;=&nbsp;s;<br /><span style="color: #008080; ">31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;top&nbsp;=&nbsp;0,&nbsp;sum&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visit[s]&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>,&nbsp;dist[s]&nbsp;=&nbsp;0,&nbsp;stack[top++]&nbsp;=&nbsp;s;<br /><span style="color: #008080; ">33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(1)&nbsp;{<br /><span style="color: #008080; ">34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u&nbsp;=&nbsp;-1;<br /><span style="color: #008080; ">35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)<br /><span style="color: #008080; ">36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!visit[i]&nbsp;&amp;&amp;&nbsp;(u&nbsp;==&nbsp;-1&nbsp;||&nbsp;dist[u]&nbsp;&gt;&nbsp;dist[i]))<br /><span style="color: #008080; ">37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u&nbsp;=&nbsp;i;<br /><span style="color: #008080; ">38</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(u&nbsp;==&nbsp;-1)&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum&nbsp;+=&nbsp;dist[u],&nbsp;stack[top++]&nbsp;=&nbsp;u,&nbsp;visit[u]&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;top;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(stack[i]&nbsp;==&nbsp;u)&nbsp;<span style="color: #0000FF; ">continue</span>;<br /><span style="color: #008080; ">42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;path[stack[i]][u]&nbsp;=&nbsp;max(path[pre[u]][stack[i]],&nbsp;dist[u]);<br /><span style="color: #008080; ">43</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;path[u][stack[i]]&nbsp;=&nbsp;path[stack[i]][u];<br /><span style="color: #008080; ">44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)<br /><span style="color: #008080; ">46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!visit[i]&nbsp;&amp;&amp;&nbsp;(maz[u][i]&nbsp;&lt;&nbsp;dist[i]))<br /><span style="color: #008080; ">47</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[i]&nbsp;=&nbsp;maz[u][i],&nbsp;pre[i]&nbsp;=&nbsp;u;<br /><span style="color: #008080; ">48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;sum;<br /><span style="color: #008080; ">50</span>&nbsp;}<br /><span style="color: #008080; ">51</span>&nbsp;<br /><span style="color: #008080; ">52</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;SMT()&nbsp;{<span style="color: #008000; ">//</span><span style="color: #008000; ">次小生成树</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">53</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;Min&nbsp;=&nbsp;inf,&nbsp;sum&nbsp;=&nbsp;Prim(1);<span style="color: #008000; ">//</span><span style="color: #008000; ">先求一次最小生成树</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">54</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)<br /><span style="color: #008080; ">55</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;i&nbsp;+&nbsp;1;&nbsp;j&nbsp;&lt;=&nbsp;n;&nbsp;j++)<br /><span style="color: #008080; ">56</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(pre[i]&nbsp;!=&nbsp;j&nbsp;&amp;&amp;&nbsp;pre[j]&nbsp;!=&nbsp;i&nbsp;&amp;&amp;&nbsp;maz[i][j]&nbsp;&lt;&nbsp;inf)<br /><span style="color: #008080; ">57</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Min&nbsp;=&nbsp;min(Min,&nbsp;sum&nbsp;-&nbsp;path[i][j]&nbsp;+&nbsp;maz[i][j]);<br /><span style="color: #008080; ">58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(Min&nbsp;==&nbsp;sum)&nbsp;puts("Not&nbsp;Unique!");<br /><span style="color: #008080; ">59</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;printf("%d\n",&nbsp;sum);<br /><span style="color: #008080; ">60</span>&nbsp;}<br /><span style="color: #008080; ">61</span>&nbsp;<br /><span style="color: #008080; ">62</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br /><span style="color: #008080; ">63</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;T,&nbsp;u,&nbsp;v,&nbsp;w;<br /><span style="color: #008080; ">64</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&amp;T);<br /><span style="color: #008080; ">65</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(T--)&nbsp;{<br /><span style="color: #008080; ">66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d",&nbsp;&amp;n,&nbsp;&amp;m);<br /><span style="color: #008080; ">67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();<br /><span style="color: #008080; ">68</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;m;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d%d",&nbsp;&amp;u,&nbsp;&amp;v,&nbsp;&amp;w);<br /><span style="color: #008080; ">70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maz[u][v]&nbsp;=&nbsp;maz[v][u]&nbsp;=&nbsp;w;<br /><span style="color: #008080; ">71</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">72</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SMT();<br /><span style="color: #008080; ">73</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">74</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">75</span>&nbsp;}<font color="#008080"><br /></font></div><img src ="http://www.cppblog.com/y346491470/aggbug/164542.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2012-01-26 16:16 <a href="http://www.cppblog.com/y346491470/articles/164542.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hdoj 4081 Qin Shi Huang's National Road System - 次小生成树变形</title><link>http://www.cppblog.com/y346491470/articles/164541.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Thu, 26 Jan 2012 08:05:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/164541.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/164541.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/164541.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/164541.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/164541.html</trackback:ping><description><![CDATA[【题意】：给出n(n&lt;=1000)个城市的坐标和城市的居住人口，要求修n-1条路使得n个城市连通，修路的代价就是路长，并且允许免费修一条路。问：被免费的路所连接的两个城市人口之和比上修路的代价（这里是n-2条路的代价之和，因为有一条路是免费的)的最大值是多少。<br /><br />【题解】：这题是北京现场赛的A题，当时想到解法，可惜是O(n*n*n)的。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;其实这题就是一道次小生成树变形，不过当时不会，现在学了，顺便切了它。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;首先可以想到最小生成树，但是免费的路这个怎么处理，考虑到数据n&lt;=1000，我们可以枚举两点之间的路。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;如果该路已经在MST上，那么比值就是(cnt[u]+cnt[v]) / (MST - w(u, v))；<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;如果该路不在MST上，那么我们把这条路加上去的话肯定会形成一个环，为了保证比值最大，我们显然要删除环上第二大的边(第一大的边肯定是新添加的这条路，不能删除)，那么比值就是(cnt[u]+cnt[v]) / (MST - path[u][v]),其中path[i][j]表示在MST上节点i到节点j路径上的最大边。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;复杂度O(n*n)。<br /><br />【代码】：<br /><div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; border-image: initial; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;#include&nbsp;"iostream"<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;#include&nbsp;"cstdio"<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;#include&nbsp;"cstring"<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;#include&nbsp;"algorithm"<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;#include&nbsp;"vector"<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;#include&nbsp;"queue"<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;#include&nbsp;"cmath"<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;#include&nbsp;"string"<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;#include&nbsp;"cctype"<br /><span style="color: #008080; ">10</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008080; ">11</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;pb&nbsp;push_back<br /><span style="color: #008080; ">12</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1)<br /><span style="color: #008080; ">13</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;rc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1&nbsp;|&nbsp;1)<br /><span style="color: #008080; ">14</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lowbit(x)&nbsp;(x&nbsp;&amp;&nbsp;(-x))<br /><span style="color: #008080; ">15</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;ll&nbsp;long&nbsp;long<br /><span style="color: #008080; ">16</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxn&nbsp;1005<br /><span style="color: #008080; ">17</span>&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;dinf&nbsp;=&nbsp;1e10;<br /><span style="color: #008080; ">18</span>&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;inf&nbsp;=&nbsp;1&nbsp;&lt;&lt;&nbsp;30;<br /><span style="color: #008080; ">19</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n,&nbsp;m;<br /><span style="color: #008080; ">20</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;pre[maxn],&nbsp;stack[2*maxn],&nbsp;top;<br /><span style="color: #008080; ">21</span>&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;maz[maxn][maxn],&nbsp;dist[maxn],&nbsp;path[maxn][maxn];<br /><span style="color: #008080; ">22</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;visit[maxn];<br /><span style="color: #008080; ">23</span>&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;Point&nbsp;{<br /><span style="color: #008080; ">24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;x,&nbsp;y;<br /><span style="color: #008080; ">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cnt;<br /><span style="color: #008080; ">26</span>&nbsp;}p[maxn];<br /><span style="color: #008080; ">27</span>&nbsp;<br /><span style="color: #008080; ">28</span>&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;getdist(<span style="color: #0000FF; ">const</span>&nbsp;Point&nbsp;&amp;a,&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;Point&nbsp;&amp;b)&nbsp;{<br /><span style="color: #008080; ">29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;sqrt((a.x&nbsp;-&nbsp;b.x)&nbsp;*&nbsp;(a.x&nbsp;-&nbsp;b.x)&nbsp;+&nbsp;(a.y&nbsp;-&nbsp;b.y)&nbsp;*&nbsp;(a.y&nbsp;-&nbsp;b.y));<br /><span style="color: #008080; ">30</span>&nbsp;}<br /><span style="color: #008080; ">31</span>&nbsp;<br /><span style="color: #008080; ">32</span>&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;prim(<span style="color: #0000FF; ">int</span>&nbsp;s)&nbsp;{<br /><span style="color: #008080; ">33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;ans&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)&nbsp;visit[i]&nbsp;=&nbsp;<span style="color: #0000FF; ">false</span>,&nbsp;dist[i]&nbsp;=&nbsp;dinf,&nbsp;pre[i]&nbsp;=&nbsp;s;<br /><span style="color: #008080; ">35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[s]&nbsp;=&nbsp;0,&nbsp;top&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(1)&nbsp;{<br /><span style="color: #008080; ">37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u&nbsp;=&nbsp;-1;<br /><span style="color: #008080; ">38</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!visit[i]&nbsp;&amp;&amp;&nbsp;(u&nbsp;==&nbsp;-1&nbsp;||&nbsp;dist[i]&nbsp;&lt;&nbsp;dist[u]))&nbsp;u&nbsp;=&nbsp;i;<br /><span style="color: #008080; ">40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(u&nbsp;==&nbsp;-1)&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stack[top++]&nbsp;=&nbsp;u,&nbsp;visit[u]&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">43</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;+=&nbsp;dist[u];<br /><span style="color: #008080; ">44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;top;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(stack[i]&nbsp;==&nbsp;u)&nbsp;<span style="color: #0000FF; ">continue</span>;<br /><span style="color: #008080; ">46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;path[stack[i]][u]&nbsp;=&nbsp;max(path[stack[i]][pre[u]],&nbsp;dist[u]);<br /><span style="color: #008080; ">47</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;path[u][stack[i]]&nbsp;=&nbsp;path[stack[i]][u];<br /><span style="color: #008080; ">48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!visit[i]&nbsp;&amp;&amp;&nbsp;maz[u][i]&nbsp;&lt;&nbsp;dist[i])&nbsp;<br /><span style="color: #008080; ">51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[i]&nbsp;=&nbsp;maz[u][i],&nbsp;pre[i]&nbsp;=&nbsp;u;<br /><span style="color: #008080; ">52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;ans;<br /><span style="color: #008080; ">55</span>&nbsp;}<br /><span style="color: #008080; ">56</span>&nbsp;<br /><span style="color: #008080; ">57</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;solve()&nbsp;{<br /><span style="color: #008080; ">58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;MST&nbsp;=&nbsp;prim(0),&nbsp;ans&nbsp;=&nbsp;0.0;<br /><span style="color: #008080; ">59</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">60</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;0;&nbsp;j&nbsp;&lt;&nbsp;n;&nbsp;j++)&nbsp;{<br /><span style="color: #008080; ">61</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(i&nbsp;==&nbsp;j)&nbsp;<span style="color: #0000FF; ">continue</span>;<br /><span style="color: #008080; ">62</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>((pre[i]&nbsp;==&nbsp;j&nbsp;||&nbsp;pre[j]&nbsp;==&nbsp;i))&nbsp;ans&nbsp;=&nbsp;max(ans,&nbsp;(p[i].cnt&nbsp;+&nbsp;p[j].cnt)&nbsp;/&nbsp;(MST&nbsp;-&nbsp;maz[i][j]));<br /><span style="color: #008080; ">63</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;ans&nbsp;=&nbsp;max(ans,&nbsp;(p[i].cnt&nbsp;+&nbsp;p[j].cnt)&nbsp;/&nbsp;(MST&nbsp;-&nbsp;path[i][j]));<br /><span style="color: #008080; ">64</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">65</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%.2f\n",&nbsp;ans);<br /><span style="color: #008080; ">67</span>&nbsp;}<br /><span style="color: #008080; ">68</span>&nbsp;<br /><span style="color: #008080; ">69</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br /><span style="color: #008080; ">70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;T;<br /><span style="color: #008080; ">71</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&amp;T);<br /><span style="color: #008080; ">72</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(T--)&nbsp;{<br /><span style="color: #008080; ">73</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&amp;n);<br /><span style="color: #008080; ">74</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">75</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%lf%lf%d",&nbsp;&amp;p[i].x,&nbsp;&amp;p[i].y,&nbsp;&amp;p[i].cnt);<br /><span style="color: #008080; ">76</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">77</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">78</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;0;&nbsp;j&nbsp;&lt;&nbsp;n;&nbsp;j++)&nbsp;{<br /><span style="color: #008080; ">79</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maz[i][j]&nbsp;=&nbsp;getdist(p[i],&nbsp;p[j]);<br /><span style="color: #008080; ">80</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;path[i][j]&nbsp;=&nbsp;0.0;<br /><span style="color: #008080; ">81</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">82</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">83</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;solve();<br /><span style="color: #008080; ">84</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">85</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">86</span>&nbsp;}<font color="#008080"><br /></font></div><img src ="http://www.cppblog.com/y346491470/aggbug/164541.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2012-01-26 16:05 <a href="http://www.cppblog.com/y346491470/articles/164541.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>USTC 1280 Finding Shortest Path - 最短路 + 最小割最大流</title><link>http://www.cppblog.com/y346491470/articles/164517.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Wed, 25 Jan 2012 07:29:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/164517.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/164517.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/164517.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/164517.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/164517.html</trackback:ping><description><![CDATA[【题意】：给出一幅无向图，n个顶点m条边，每条边都有一定的长度和删除这条边的代价，给出s和t，问至少用多少代价删除一些边使得s到t的最短路变长。<br /><br />【题解】：显然，我们要删的边必定是最短路上的边。所以先求一次最短路，并保留最短路上的边，若满足dist[u] + w(u,v) == dist[v]，那么这条边就是最短路上的边。现在问题就转化为用最小的代价把s和t分割，这显然是个最小割的问题，求最大流即为ans。<br /><br />【代码】：<br /><div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; border-image: initial; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp; 1</span>&nbsp;#include&nbsp;"iostream"<br /><span style="color: #008080; ">&nbsp;&nbsp;2</span>&nbsp;#include&nbsp;"cstdio"<br /><span style="color: #008080; ">&nbsp;&nbsp;3</span>&nbsp;#include&nbsp;"cstring"<br /><span style="color: #008080; ">&nbsp;&nbsp;4</span>&nbsp;#include&nbsp;"algorithm"<br /><span style="color: #008080; ">&nbsp;&nbsp;5</span>&nbsp;#include&nbsp;"vector"<br /><span style="color: #008080; ">&nbsp;&nbsp;6</span>&nbsp;#include&nbsp;"queue"<br /><span style="color: #008080; ">&nbsp;&nbsp;7</span>&nbsp;#include&nbsp;"cmath"<br /><span style="color: #008080; ">&nbsp;&nbsp;8</span>&nbsp;#include&nbsp;"string"<br /><span style="color: #008080; ">&nbsp;&nbsp;9</span>&nbsp;#include&nbsp;"cctype"<br /><span style="color: #008080; ">&nbsp;10</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008080; ">&nbsp;11</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;pb&nbsp;push_back<br /><span style="color: #008080; ">&nbsp;12</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1)<br /><span style="color: #008080; ">&nbsp;13</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;rc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1&nbsp;|&nbsp;1)<br /><span style="color: #008080; ">&nbsp;14</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lowbit(x)&nbsp;(x&nbsp;&amp;&nbsp;(-x))<br /><span style="color: #008080; ">&nbsp;15</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;ll&nbsp;long&nbsp;long<br /><span style="color: #008080; ">&nbsp;16</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxn&nbsp;2000<br /><span style="color: #008080; ">&nbsp;17</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxm&nbsp;50000<br /><span style="color: #008080; ">&nbsp;18</span>&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;inf&nbsp;=&nbsp;1&nbsp;&lt;&lt;&nbsp;30;<br /><span style="color: #008080; ">&nbsp;19</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;s,&nbsp;t,&nbsp;n,&nbsp;m;<br /><span style="color: #008080; ">&nbsp;20</span>&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;Edge&nbsp;{<br /><span style="color: #008080; ">&nbsp;21</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;v,&nbsp;w,&nbsp;cost,&nbsp;next;<br /><span style="color: #008080; ">&nbsp;22</span>&nbsp;}et[maxm];<br /><span style="color: #008080; ">&nbsp;23</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;24</span>&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;edge&nbsp;{<br /><span style="color: #008080; ">&nbsp;25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;v,&nbsp;cap,&nbsp;flow,&nbsp;next;<br /><span style="color: #008080; ">&nbsp;26</span>&nbsp;}et2[maxm];<br /><span style="color: #008080; ">&nbsp;27</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;28</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;eh[maxn],&nbsp;tot,&nbsp;dist[maxn];<br /><span style="color: #008080; ">&nbsp;29</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;visit[maxn];<br /><span style="color: #008080; ">&nbsp;30</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;eh2[maxn],&nbsp;tot2,&nbsp;low[maxn],&nbsp;dist2[maxn],&nbsp;pre[maxn],&nbsp;cur[maxn],&nbsp;cnt[maxn];<br /><span style="color: #008080; ">&nbsp;31</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;32</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;init()&nbsp;{<br /><span style="color: #008080; ">&nbsp;33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tot&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">&nbsp;34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tot2&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">&nbsp;35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(eh,&nbsp;-1,&nbsp;<span style="color: #0000FF; ">sizeof</span>&nbsp;(eh));<br /><span style="color: #008080; ">&nbsp;36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(eh2,&nbsp;-1,&nbsp;<span style="color: #0000FF; ">sizeof</span>&nbsp;(eh2));<br /><span style="color: #008080; ">&nbsp;37</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;38</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;39</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;addedge(<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;v,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;w,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cost)&nbsp;{<br /><span style="color: #008080; ">&nbsp;40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Edge&nbsp;e&nbsp;=&nbsp;{u,&nbsp;v,&nbsp;w,&nbsp;cost,&nbsp;eh[u]};<br /><span style="color: #008080; ">&nbsp;41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;et[tot]&nbsp;=&nbsp;e;<br /><span style="color: #008080; ">&nbsp;42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eh[u]&nbsp;=&nbsp;tot++;<br /><span style="color: #008080; ">&nbsp;43</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;44</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;45</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;add(<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;v,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cap,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;flow)&nbsp;{<br /><span style="color: #008080; ">&nbsp;46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;edge&nbsp;e&nbsp;=&nbsp;{u,&nbsp;v,&nbsp;cap,&nbsp;flow,&nbsp;eh2[u]};<br /><span style="color: #008080; ">&nbsp;47</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;et2[tot2]&nbsp;=&nbsp;e;<br /><span style="color: #008080; ">&nbsp;48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eh2[u]&nbsp;=&nbsp;tot2++;<br /><span style="color: #008080; ">&nbsp;49</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;50</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;51</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;addedge2(<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;v,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cap)&nbsp;{<br /><span style="color: #008080; ">&nbsp;52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add(u,&nbsp;v,&nbsp;cap,&nbsp;0),&nbsp;add(v,&nbsp;u,&nbsp;0,&nbsp;0);<br /><span style="color: #008080; ">&nbsp;53</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;54</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;55</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;spfa(<span style="color: #0000FF; ">int</span>&nbsp;s)&nbsp;{<br /><span style="color: #008080; ">&nbsp;56</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)&nbsp;visit[i]&nbsp;=&nbsp;<span style="color: #0000FF; ">false</span>,&nbsp;dist[i]&nbsp;=&nbsp;inf,&nbsp;cnt[i]&nbsp;=&nbsp;0;<span style="color: #008000; ">//</span><span style="color: #008000; ">dist[i]&nbsp;=&nbsp;-inf;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;57</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;dist[s]&nbsp;=&nbsp;0,&nbsp;visit[s]&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">&nbsp;58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;queue&lt;<span style="color: #0000FF; ">int</span>&gt;&nbsp;que;<br /><span style="color: #008080; ">&nbsp;59</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;que.push(s);<br /><span style="color: #008080; ">&nbsp;60</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(!que.empty())&nbsp;{<br /><span style="color: #008080; ">&nbsp;61</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u&nbsp;=&nbsp;que.front();<br /><span style="color: #008080; ">&nbsp;62</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;que.pop(),&nbsp;visit[u]&nbsp;=&nbsp;<span style="color: #0000FF; ">false</span>;<br /><span style="color: #008080; ">&nbsp;63</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;eh[u];&nbsp;i&nbsp;!=&nbsp;-1;&nbsp;i&nbsp;=&nbsp;et[i].next)&nbsp;{<br /><span style="color: #008080; ">&nbsp;64</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;v&nbsp;=&nbsp;et[i].v,&nbsp;w&nbsp;=&nbsp;et[i].w;<br /><span style="color: #008080; ">&nbsp;65</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(dist[v]&nbsp;&gt;&nbsp;w&nbsp;+&nbsp;dist[u])&nbsp;{<span style="color: #008000; ">//</span><span style="color: #008000; ">dist[v]&nbsp;&lt;&nbsp;w&nbsp;+&nbsp;dist[u]</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;66</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[v]&nbsp;=&nbsp;w&nbsp;+&nbsp;dist[u];<br /><span style="color: #008080; ">&nbsp;67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!visit[v])&nbsp;{<br /><span style="color: #008080; ">&nbsp;68</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visit[v]&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">&nbsp;69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;que.push(v);<br /><span style="color: #008080; ">&nbsp;70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;71</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;72</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;73</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;74</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;75</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;76</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;build()&nbsp;{<br /><span style="color: #008080; ">&nbsp;77</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;tot;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">&nbsp;78</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u&nbsp;=&nbsp;et[i].u,&nbsp;v&nbsp;=&nbsp;et[i].v,&nbsp;w&nbsp;=&nbsp;et[i].w,&nbsp;cost&nbsp;=&nbsp;et[i].cost;<br /><span style="color: #008080; ">&nbsp;79</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(dist[u]&nbsp;+&nbsp;w&nbsp;==&nbsp;dist[v])&nbsp;{<br /><span style="color: #008080; ">&nbsp;80</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addedge2(u,&nbsp;v,&nbsp;cost);<br /><span style="color: #008080; ">&nbsp;81</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;82</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;83</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;84</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;85</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;isap(<span style="color: #0000FF; ">int</span>&nbsp;s,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;t,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n){<br /><span style="color: #008080; ">&nbsp;86</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;v,&nbsp;now,&nbsp;flow&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">&nbsp;87</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(dist2,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(dist2));&nbsp;<br /><span style="color: #008080; ">&nbsp;88</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(low,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(low));<br /><span style="color: #008080; ">&nbsp;89</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(cnt,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(cnt));<br /><span style="color: #008080; ">&nbsp;90</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(u&nbsp;=&nbsp;0&nbsp;;&nbsp;u&nbsp;&lt;=&nbsp;n&nbsp;;&nbsp;u++)&nbsp;cur[u]&nbsp;=&nbsp;eh2[u];<br /><span style="color: #008080; ">&nbsp;91</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;low[s]&nbsp;=&nbsp;inf,&nbsp;cnt[0]&nbsp;=&nbsp;n,&nbsp;u&nbsp;=&nbsp;s;<br /><span style="color: #008080; ">&nbsp;92</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(dist2[s]&nbsp;&lt;&nbsp;n)&nbsp;{<br /><span style="color: #008080; ">&nbsp;93</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(now&nbsp;=&nbsp;cur[u];&nbsp;now&nbsp;!=&nbsp;-1;&nbsp;now&nbsp;=&nbsp;et2[now].next)<br /><span style="color: #008080; ">&nbsp;94</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(et2[now].cap&nbsp;-&nbsp;et2[now].flow&nbsp;&amp;&amp;&nbsp;dist2[u]&nbsp;==&nbsp;dist2[&nbsp;v&nbsp;=&nbsp;et2[now].v&nbsp;]&nbsp;+&nbsp;1&nbsp;)&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">&nbsp;95</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(now&nbsp;!=&nbsp;-1)&nbsp;{<br /><span style="color: #008080; ">&nbsp;96</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cur[u]&nbsp;=&nbsp;pre[v]&nbsp;=&nbsp;now;<br /><span style="color: #008080; ">&nbsp;97</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;low[v]&nbsp;=&nbsp;min(et2[now].cap&nbsp;-&nbsp;et2[now].flow,&nbsp;low[u]);<br /><span style="color: #008080; ">&nbsp;98</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u&nbsp;=&nbsp;v;<br /><span style="color: #008080; ">&nbsp;99</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(u&nbsp;==&nbsp;t)&nbsp;{<br /><span style="color: #008080; ">100</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(;&nbsp;u&nbsp;!=&nbsp;s;&nbsp;u&nbsp;=&nbsp;et2[pre[u]].u){<br /><span style="color: #008080; ">101</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;et2[pre[u]].flow&nbsp;+=&nbsp;low[t];<br /><span style="color: #008080; ">102</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;et2[pre[u]^1].flow&nbsp;-=&nbsp;low[t];<br /><span style="color: #008080; ">103</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">104</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flow&nbsp;+=&nbsp;low[t];&nbsp;low[s]&nbsp;=&nbsp;inf;<br /><span style="color: #008080; ">105</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">106</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br /><span style="color: #008080; ">107</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(--cnt[dist2[u]]&nbsp;==&nbsp;0)&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">108</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist2[u]&nbsp;=&nbsp;n,&nbsp;cur[u]&nbsp;=&nbsp;eh2[u];<br /><span style="color: #008080; ">109</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(now&nbsp;=&nbsp;eh2[u];&nbsp;now&nbsp;!=&nbsp;-1;&nbsp;now&nbsp;=&nbsp;et2[now].next)<br /><span style="color: #008080; ">110</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(et2[now].cap&nbsp;-&nbsp;et2[now].flow&nbsp;&amp;&amp;&nbsp;dist2[u]&nbsp;&gt;&nbsp;dist2[et2[now].v]&nbsp;+&nbsp;1)<br /><span style="color: #008080; ">111</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist2[u]&nbsp;=&nbsp;dist2[et2[now].v]&nbsp;+&nbsp;1;<br /><span style="color: #008080; ">112</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnt[dist2[u]]++;<br /><span style="color: #008080; ">113</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(u&nbsp;!=&nbsp;s)&nbsp;u&nbsp;=&nbsp;et2[pre[u]].u;<br /><span style="color: #008080; ">114</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">115</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">116</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;flow;<br /><span style="color: #008080; ">117</span>&nbsp;}<br /><span style="color: #008080; ">118</span>&nbsp;<br /><span style="color: #008080; ">119</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br /><span style="color: #008080; ">120</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;v,&nbsp;w,&nbsp;c;<br /><span style="color: #008080; ">121</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;Case&nbsp;=&nbsp;1;<br /><span style="color: #008080; ">122</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(~scanf("%d%d",&nbsp;&amp;n,&nbsp;&amp;m))&nbsp;{<br /><span style="color: #008080; ">123</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!n&nbsp;&amp;&amp;&nbsp;!m)&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">124</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d",&nbsp;&amp;s,&nbsp;&amp;t);<br /><span style="color: #008080; ">125</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();<br /><span style="color: #008080; ">126</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;m;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">127</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d%d%d",&nbsp;&amp;u,&nbsp;&amp;v,&nbsp;&amp;w,&nbsp;&amp;c);<br /><span style="color: #008080; ">128</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addedge(u,&nbsp;v,&nbsp;w,&nbsp;c);<br /><span style="color: #008080; ">129</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addedge(v,&nbsp;u,&nbsp;w,&nbsp;c);<br /><span style="color: #008080; ">130</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">131</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spfa(s);<br /><span style="color: #008080; ">132</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;build();<br /><span style="color: #008080; ">133</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;ans&nbsp;=&nbsp;isap(s,&nbsp;t,&nbsp;n);<br /><span style="color: #008080; ">134</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("Case&nbsp;%d:&nbsp;%d\n",&nbsp;Case++,&nbsp;ans);<br /><span style="color: #008080; ">135</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">136</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">137</span>&nbsp;}<br /><span style="color: #008080; ">138</span>&nbsp;</div><img src ="http://www.cppblog.com/y346491470/aggbug/164517.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2012-01-25 15:29 <a href="http://www.cppblog.com/y346491470/articles/164517.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hdoj 4106 Fruit Ninja - 最大费用流</title><link>http://www.cppblog.com/y346491470/articles/159889.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Wed, 09 Nov 2011 14:09:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/159889.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/159889.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/159889.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/159889.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/159889.html</trackback:ping><description><![CDATA[【题意】：切水果游戏。给出n个水果，每个水果有对应的分数，规定连续m个水果之间最多能切掉k个，求能够切得的最大分数。<br /><br />【题解】：一道论文题。发现网络流确实强大，可以解决很多问题。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这题解法是最大费用流，看到了论文的构图，发现超级强大。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;构图：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;把每个水果拆成两个点 i 和 i&#8217;，连边 i -&gt; i&#8217;，容量为1，费用为切掉这个水果的分数；<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;加入一个源点s，连边s -&gt; i，容量为inf，费用为0；<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;加入一个汇点t，连边 i&#8217; -&gt; t，容量为inf，费用为0；<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;连边i -&gt; i + 1，容量为inf，费用为0；<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;连边i' -&gt; i + m，容量为inf，费用为0。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最后，限定最多增广k次即可，最大费用即为答案。这题时限卡得比较紧，最好不要用stl的queue。<br /><br />【代码】：
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">&nbsp;1</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">iostream</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;2</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">cstdio</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;3</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">cstring</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;4</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;std;<br /></span><span style="color: #008080">&nbsp;5</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">#define</span><span style="color: #000000">&nbsp;maxn&nbsp;2500</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;6</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">#define</span><span style="color: #000000">&nbsp;maxm&nbsp;1000000</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;7</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;inf&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">30</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;8</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;eh[maxn],&nbsp;p[maxn],&nbsp;low[maxn],&nbsp;tot,&nbsp;dist[maxn];<br /></span><span style="color: #008080">&nbsp;9</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;s,&nbsp;t,&nbsp;n,&nbsp;m,&nbsp;k;<br /></span><span style="color: #008080">10</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;ans,&nbsp;anscost;<br /></span><span style="color: #008080">11</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;val[maxn];<br /></span><span style="color: #008080">12</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;visit[maxn];<br /></span><span style="color: #008080">13</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;que[</span><span style="color: #000000">1000000</span><span style="color: #000000">],&nbsp;head,&nbsp;tail;<br /></span><span style="color: #008080">14</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">struct</span><span style="color: #000000">&nbsp;Edge&nbsp;{<br /></span><span style="color: #008080">15</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;u,&nbsp;v,&nbsp;cost,&nbsp;cap,&nbsp;flow,&nbsp;next;<br /></span><span style="color: #008080">16</span>&nbsp;<span style="color: #000000">}et[maxm];<br /></span><span style="color: #008080">17</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">18</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;init()&nbsp;{<br /></span><span style="color: #008080">19</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;tot&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">20</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;memset(eh,&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(eh));<br /></span><span style="color: #008080">21</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">22</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">23</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;add(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;u,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;v,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;cost,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;cap,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;flow)&nbsp;{<br /></span><span style="color: #008080">24</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Edge&nbsp;e&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;{u,&nbsp;v,&nbsp;cost,&nbsp;cap,&nbsp;flow,&nbsp;eh[u]};<br /></span><span style="color: #008080">25</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;et[tot]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;e;<br /></span><span style="color: #008080">26</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;eh[u]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;tot</span><span style="color: #000000">++</span><span style="color: #000000">;<br /></span><span style="color: #008080">27</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">28</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">29</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;addedge(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;u,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;v,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;cost,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;cap)&nbsp;{<br /></span><span style="color: #008080">30</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;add(u,&nbsp;v,&nbsp;cost,&nbsp;cap,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">),&nbsp;add(v,&nbsp;u,&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">cost,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">);<br /></span><span style="color: #008080">31</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">32</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">33</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;spfa()&nbsp;{<br /></span><span style="color: #008080">34</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;head&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;tail&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">35</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;memset(visit,&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(visit));<br /></span><span style="color: #008080">36</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;memset(p,&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(p));<br /></span><span style="color: #008080">37</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;memset(low,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(low));<br /></span><span style="color: #008080">38</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;maxn;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;dist[i]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">inf;<br /></span><span style="color: #008080">39</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;visit[s]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">,&nbsp;low[s]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;inf,&nbsp;dist[s]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">40</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;que[tail</span><span style="color: #000000">++</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;s;<br /></span><span style="color: #008080">41</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(head&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;tail)&nbsp;{<br /></span><span style="color: #008080">42</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;u&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;que[head</span><span style="color: #000000">++</span><span style="color: #000000">];<br /></span><span style="color: #008080">43</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visit[u]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br /></span><span style="color: #008080">44</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;eh[u];&nbsp;i&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;et[i].next)&nbsp;{<br /></span><span style="color: #008080">45</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;v&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;et[i].v,&nbsp;cost&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;et[i].cost,&nbsp;cap&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;et[i].cap,&nbsp;flow&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;et[i].flow;<br /></span><span style="color: #008080">46</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(cap&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;flow&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;dist[u]&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;cost&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;dist[v])&nbsp;{<br /></span><span style="color: #008080">47</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[v]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;dist[u]&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;cost;<br /></span><span style="color: #008080">48</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[v]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;i;<br /></span><span style="color: #008080">49</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;low[v]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;min(low[u],&nbsp;cap&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;flow);<br /></span><span style="color: #008080">50</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">visit[v])&nbsp;{<br /></span><span style="color: #008080">51</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;que[tail</span><span style="color: #000000">++</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;v;<br /></span><span style="color: #008080">52</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visit[v]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br /></span><span style="color: #008080">53</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">54</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">55</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">56</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">57</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;dist[t]&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">inf;<br /></span><span style="color: #008080">58</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">59</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">60</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;costflow()&nbsp;{<br /></span><span style="color: #008080">61</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;anscost&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">62</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(ans&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;k&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;spfa())&nbsp;{<br /></span><span style="color: #008080">63</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;x&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;p[t];<br /></span><span style="color: #008080">64</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;low[t];<br /></span><span style="color: #008080">65</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;anscost&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;low[t]&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;dist[t];<br /></span><span style="color: #008080">66</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(x&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">67</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;et[x].flow&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;low[t];<br /></span><span style="color: #008080">68</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;et[x</span><span style="color: #000000">^</span><span style="color: #000000">1</span><span style="color: #000000">].flow&nbsp;</span><span style="color: #000000">-=</span><span style="color: #000000">&nbsp;low[t];<br /></span><span style="color: #008080">69</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;p[et[x].u];<br /></span><span style="color: #008080">70</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">71</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">72</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">73</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">74</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;main()&nbsp;{<br /></span><span style="color: #008080">75</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(</span><span style="color: #000000">~</span><span style="color: #000000">scanf(</span><span style="color: #000000">"</span><span style="color: #000000">%d%d%d</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">n,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">m,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">k))&nbsp;{<br /></span><span style="color: #008080">76</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();<br /></span><span style="color: #008080">77</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;min(n,&nbsp;m);<br /></span><span style="color: #008080">78</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;sum&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">79</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;t&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;n&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;<br /></span><span style="color: #008080">80</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;n;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">81</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000">"</span><span style="color: #000000">%d</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">val[i]);<br /></span><span style="color: #008080">82</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;val[i];<br /></span><span style="color: #008080">83</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addedge(s,&nbsp;i,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;inf);<br /></span><span style="color: #008080">84</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addedge(i,&nbsp;i&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;n,&nbsp;val[i],&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">);<br /></span><span style="color: #008080">85</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addedge(i&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;n,&nbsp;t,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;inf);<br /></span><span style="color: #008080">86</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(i&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;n)&nbsp;addedge(i,&nbsp;i&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;inf);<br /></span><span style="color: #008080">87</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(i&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;m&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;n)&nbsp;addedge(i&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;n,&nbsp;i&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;m,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;inf);<br /></span><span style="color: #008080">88</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">89</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(m&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;k)&nbsp;{<br /></span><span style="color: #008080">90</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">%d\n</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;sum);<br /></span><span style="color: #008080">91</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">continue</span><span style="color: #000000">;<br /></span><span style="color: #008080">92</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">93</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;costflow();<br /></span><span style="color: #008080">94</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">%d\n</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;anscost);<br /></span><span style="color: #008080">95</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">96</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">97</span>&nbsp;<span style="color: #000000">}</span></div><br /><img src ="http://www.cppblog.com/y346491470/aggbug/159889.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2011-11-09 22:09 <a href="http://www.cppblog.com/y346491470/articles/159889.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>网络流总结 - Flow - y</title><link>http://www.cppblog.com/y346491470/articles/158719.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Wed, 19 Oct 2011 15:11:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/158719.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/158719.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/158719.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/158719.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/158719.html</trackback:ping><description><![CDATA[常见转化：<br />拆点(点容量转化为边容量) ：把点 i 拆点成 i , i'，连边 i -&gt; i'，容量为点权。<br />拆边(无向图转化为有向图) ：对于每条无向边(u,v)拆成两条&lt;u,v&gt;,&lt;v,u&gt;容量均为原边权。<br />最小费用：最小割 或者 最小费用流。<br /><br />最大流最小割定理：一个网络的最大流等于最小割的容量。<br />最小费用流定理：<span style="color: #000000">一个费用流是最小费用流的充要条件是这个费用流的残量网络没有负费用圈。<br /></span><br />割的性质：<br /><br />性质1（不连通）在给定的流网络中，去掉割的边集，则不存在任何一条从源到汇的路径。<br /><br />性质2（两类点）在给定的流网络中，任意一个割将点集划分成两部分。割为两部分点之间的&#8220;桥梁&#8221;。<br /><br />技巧：<br /><br />技巧1 用正无限容量排除不参与决策的边。<br /><br />技巧2 使用割的定义式来分析最优性<br /><br />技巧3 利用与源或汇关联的边容量处理点权<br /><br />【最大权闭合图】<br /><br />定义：一个有向图的闭合图G=(V,E)是该有向图的一个点集，且该点集的所有出边都还指向该点集。即闭合图内的任意点的任意后继也一定在闭合图中。闭合图是允许超过一个连通块的。给每个点v分配一个点权（任意实数，可正可负）。最大权闭合图，是一个点权之和最大的闭合图。<br /><br />构图：在原图点集的基础上增加源s和汇t；将原图每条有向边&lt;u,v&gt;替换为容量为inf的有向边；增加连接源s到原图每个正权点u(W<sub>u</sub>&gt;0)的有向边&lt;s,u&gt;，容量为W<sub>u</sub>；增加连接原图每个负权点v(W<sub>v</sub>&lt;0)到汇t的有向边&lt;v,t&gt;，容量为-W<sub>v</sub>。<br /><br />最大权闭合图 = 所有正权点的权值和 - 最小割。<br /><br />【最小点权覆盖集】<br /><br />定义：点覆盖集是无向图的一个点集，使得该图中所有边都至少有一个端点在该集合内。最小点覆盖集是在无向图中，点数最少的点覆盖集。<br />最小点权覆盖集是在带点权无向图中，点权之和最小的点覆盖集。<br /><br />构图：在原图点集的基础上增加源s和汇t；将每条二分图的边&lt;u,v&gt;替换为容量为inf的有向边&lt;u,v&gt;；增加源s到X部的点u的有向边&lt;s,u&gt;，容量为该点权值W<sub>u</sub>；增加Y部的点到汇t的有向边&lt;v,t&gt;，容量为该点权值W<sub>v</sub>。<br /><br />最小点权覆盖集 = 最小割。<br /><br />【最大点劝独立集】<br /><br />定义：点覆盖集是无向图的一个点集，使得任两个在该集合中的点在原图中都不相邻。最大点独立集是在无向图中，点数最多的点独立集。最大点权独立集是在带点权无向图中，点权之和最大的点独立集。<br /><br />构图：同最小点权覆盖集构图。<br /><br />最大点权独立集 = 总点权和 - 最小点权覆盖集。 <br /><br />【有上下界的网络流问题】<br /><br />【<span style="font-family: FreeMono, monospace; font-size: 11pt">无源汇最大流</span>】：<br />
<p><span style="font-family: FreeMono, monospace; font-size: 11pt">上界用</span><span style="font-family: FreeMono, monospace; font-size: 11pt">ci</span><span style="font-family: FreeMono, monospace; font-size: 11pt">表示，下界用</span><span style="font-family: FreeMono, monospace; font-size: 11pt">bi</span><span style="font-family: FreeMono, monospace; font-size: 11pt">表示。</span></p>
<p><span style="font-family: FreeMono, monospace; font-size: 11pt">下界是必须流满的，那么对于每一条边，去掉下界后，其自由流为</span><span style="font-family: FreeMono, monospace; font-size: 11pt">ci &#8211; bi</span><span style="font-family: FreeMono, monospace; font-size: 11pt">。</span></p>
<p><span style="font-family: FreeMono, monospace; font-size: 11pt">主要思想：每一个点流进来的流</span><span style="font-family: FreeMono, monospace; font-size: 11pt">=</span><span style="font-family: FreeMono, monospace; font-size: 11pt">流出去的流</span></p>
<p><span style="font-family: FreeMono, monospace; font-size: 11pt">对于每一个点</span><span style="font-family: FreeMono, monospace; font-size: 11pt">i</span><span style="font-family: FreeMono, monospace; font-size: 11pt">，令</span><span style="font-family: FreeMono, monospace; font-size: 11pt">Mi = sum(i</span><span style="font-family: FreeMono, monospace; font-size: 11pt">点所有流进来的下界流</span><span style="font-family: FreeMono, monospace; font-size: 11pt">) &#8211; sum(i</span><span style="font-family: FreeMono, monospace; font-size: 11pt">点所有流出去的下界流</span><span style="font-family: FreeMono, monospace; font-size: 11pt">)</span></p>
<p><span style="font-family: FreeMono, monospace; font-size: 11pt">如果</span><span style="font-family: FreeMono, monospace; font-size: 11pt">Mi</span><span style="font-family: FreeMono, monospace; font-size: 11pt">大于</span><span style="font-family: FreeMono, monospace; font-size: 11pt">0</span><span style="font-family: FreeMono, monospace; font-size: 11pt">，代表此点必须还要流出去</span><span style="font-family: FreeMono, monospace; font-size: 11pt">Mi</span><span style="font-family: FreeMono, monospace; font-size: 11pt">的自由流，那么我们从源点连一条</span><span style="font-family: FreeMono, monospace; font-size: 11pt">Mi</span><span style="font-family: FreeMono, monospace; font-size: 11pt">的边到该点。</span></p>
<p><span style="font-family: FreeMono, monospace; font-size: 11pt">如果</span><span style="font-family: FreeMono, monospace; font-size: 11pt">Mi</span><span style="font-family: FreeMono, monospace; font-size: 11pt">小于</span><span style="font-family: FreeMono, monospace; font-size: 11pt">0</span><span style="font-family: FreeMono, monospace; font-size: 11pt">，代表此点必须还要流进来</span><span style="font-family: FreeMono, monospace; font-size: 11pt">Mi</span><span style="font-family: FreeMono, monospace; font-size: 11pt">的自由流，那么我们从该点连一条</span><span style="font-family: FreeMono, monospace; font-size: 11pt">Mi</span><span style="font-family: FreeMono, monospace; font-size: 11pt">的边到汇点。</span></p>
<p><span style="font-family: FreeMono, monospace; font-size: 11pt">如果求</span><span style="font-family: FreeMono, monospace; font-size: 11pt">S-&gt;T</span><span style="font-family: FreeMono, monospace; font-size: 11pt">的最大流，看是否满流</span><span style="font-family: FreeMono, monospace; font-size: 11pt">(S</span><span style="font-family: FreeMono, monospace; font-size: 11pt">的相邻边都流满</span><span style="font-family: FreeMono, monospace; font-size: 11pt">)</span><span style="font-family: FreeMono, monospace; font-size: 11pt">。</span></p>
<p><span style="font-family: FreeMono, monospace; font-size: 11pt">满流则有解，否则无解。</span></p><br />【<span style="font-family: FreeMono, monospace; font-size: 11pt">有源汇最大流</span>】：<br />
<p><span style="font-family: FreeMono, monospace; font-size: 11pt">满足所有下界的情况下，判断是否存在可行流，方法可以转化无源汇上下界判断方法。</span></p>
<p><span style="font-family: FreeMono, monospace; font-size: 11pt">只要连一条</span><span style="font-family: FreeMono, monospace; font-size: 11pt">T &#8594; S</span><span style="font-family: FreeMono, monospace; font-size: 11pt">的边，流量为无穷，没有下界，那么原图就得到一个无源汇的循环流图。接下来的事情一样：原图中的边的流量设成自由流量</span><span style="font-family: FreeMono, monospace; font-size: 11pt">ci &#8211; bi</span><span style="font-family: FreeMono, monospace; font-size: 11pt">。新建源点</span><span style="font-family: FreeMono, monospace; font-size: 11pt">SS</span><span style="font-family: FreeMono, monospace; font-size: 11pt">汇点</span><span style="font-family: FreeMono, monospace; font-size: 11pt">TT</span><span style="font-family: FreeMono, monospace; font-size: 11pt">，求</span><span style="font-family: FreeMono, monospace; font-size: 11pt">Mi</span><span style="font-family: FreeMono, monospace; font-size: 11pt">，连边。然后求</span><span style="font-family: FreeMono, monospace; font-size: 11pt">SS &#8594; TT</span><span style="font-family: FreeMono, monospace; font-size: 11pt">最大流，判是否满流。</span></p>
<p><span style="font-family: FreeMono, monospace; font-size: 11pt">判定有解之后然后求最大流，信息都在上面求得的残留网络里面。满足所有下界时，从</span><span style="font-family: FreeMono, monospace; font-size: 11pt">s &#8594; t</span><span style="font-family: FreeMono, monospace; font-size: 11pt">的流量为多少？后悔边</span><span style="font-family: FreeMono, monospace; font-size: 11pt">s &#8594; t</span><span style="font-family: FreeMono, monospace; font-size: 11pt">的边权！然后在残留网络中</span><span style="font-family: FreeMono, monospace; font-size: 11pt">s &#8594; t</span><span style="font-family: FreeMono, monospace; font-size: 11pt">可能还有些自由流没有流满，再做一次</span><span style="font-family: FreeMono, monospace; font-size: 11pt">s &#8594; t</span><span style="font-family: FreeMono, monospace; font-size: 11pt">的最大流，所得到的最大流就是原问题的最大流</span><span style="font-family: FreeMono, monospace; font-size: 11pt">(</span><span style="font-family: FreeMono, monospace; font-size: 11pt">内含两部分：残留的自由流所得到的流</span><span style="font-family: FreeMono, monospace; font-size: 11pt">+</span><span style="font-family: FreeMono, monospace; font-size: 11pt">后悔边</span><span style="font-family: FreeMono, monospace; font-size: 11pt">s &#8594; t)</span><span style="font-family: FreeMono, monospace; font-size: 11pt">。<br /><br />【有源汇最小流】：<br /></span></p><font face="Courier New">先不加<span style="font-family: FreeMono, monospace; font-size: 11pt">t &#8594; s</span></font><span style="font-family: FreeMono, monospace; font-size: 11pt">边权为无穷的边，求</span><span style="font-family: FreeMono, monospace; font-size: 11pt">SS &#8594; TT</span><span style="font-family: FreeMono, monospace; font-size: 11pt">的最大流，如果还没有流满则再加</span><span style="font-family: FreeMono, monospace; font-size: 11pt">t &#8594; s</span><span style="font-family: FreeMono, monospace; font-size: 11pt">边权为无穷的边，再求一次最大流得到后悔边</span><span style="font-family: FreeMono, monospace; font-size: 11pt">s &#8594; t</span><span style="font-family: FreeMono, monospace; font-size: 11pt">就是原问题的最小流了。</span><br /><img src ="http://www.cppblog.com/y346491470/aggbug/158719.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2011-10-19 23:11 <a href="http://www.cppblog.com/y346491470/articles/158719.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hdoj 4049 Tourism Planning - 最大流最小割 + 最大权闭合图</title><link>http://www.cppblog.com/y346491470/articles/158693.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Wed, 19 Oct 2011 08:24:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/158693.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/158693.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/158693.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/158693.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/158693.html</trackback:ping><description><![CDATA[【题意】：有n个人按照从1到m的顺序访问m个地方，每个人都可以不去或中途退出，但是如果退出了就不能再去后面的地方了。每个人去每个地方都有对应的收益和花费，n个人里任意两个人一起去同一个地方会有额外收益，如果多个人一起则额外收益为对任意两人的额外收益求和。现在求这n个人访问m个地方的收益+额外额外收益-花费的最大值。<br /><br />
<p align="left">【题解】：构图：首先对于m个地方，每个拆成n个点，这样n&#215;m个点分别表示每个人访问每个地方，每个点的权就是这个人去对应地方的收益-花费，然后点权为正的连源，负的连汇，对于从2到m的点，每个点向它前一个点连一条容量无穷的边，表示访问该点前要先访问它前一个点。然后对于人和人间的额外收益，把每两个人间的边作为一个点，与源相连，容量为额外收益大小，然后如果这个点代表了a和b一起访问c点，则从这个点向表示a访问c和b访问c的两个点连容量为无穷的边。<br /><br />【代码】：</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">&nbsp;&nbsp;1</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">iostream</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;&nbsp;2</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">cstdio</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;&nbsp;3</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">cstring</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;&nbsp;4</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;std;<br /></span><span style="color: #008080">&nbsp;&nbsp;5</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;inf&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">30</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;&nbsp;6</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">#define</span><span style="color: #000000">&nbsp;maxn&nbsp;2000&nbsp;</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;&nbsp;7</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">#define</span><span style="color: #000000">&nbsp;maxm&nbsp;20000</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;&nbsp;8</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;n,&nbsp;m,&nbsp;s,&nbsp;t;<br /></span><span style="color: #008080">&nbsp;&nbsp;9</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;eh[maxn],&nbsp;pre[maxn],&nbsp;low[maxn],&nbsp;cur[maxn],&nbsp;cnt[maxn],&nbsp;dist[maxn],&nbsp;tot;<br /></span><span style="color: #008080">&nbsp;10</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;cost[</span><span style="color: #000000">15</span><span style="color: #000000">],&nbsp;ins[</span><span style="color: #000000">15</span><span style="color: #000000">][</span><span style="color: #000000">15</span><span style="color: #000000">],&nbsp;bonus[</span><span style="color: #000000">15</span><span style="color: #000000">][</span><span style="color: #000000">15</span><span style="color: #000000">],&nbsp;sum;<br /></span><span style="color: #008080">&nbsp;11</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">struct</span><span style="color: #000000">&nbsp;Edge&nbsp;{<br /></span><span style="color: #008080">&nbsp;12</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;u,&nbsp;v,&nbsp;cap,&nbsp;flow,&nbsp;next;<br /></span><span style="color: #008080">&nbsp;13</span>&nbsp;<span style="color: #000000">}et[maxm];<br /></span><span style="color: #008080">&nbsp;14</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;15</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;init()&nbsp;{<br /></span><span style="color: #008080">&nbsp;16</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;tot&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;sum&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;17</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;memset(eh,&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(eh));<br /></span><span style="color: #008080">&nbsp;18</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">&nbsp;19</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;20</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;add(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;u,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;v,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;cap,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;flow)&nbsp;{<br /></span><span style="color: #008080">&nbsp;21</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Edge&nbsp;e&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;{u,&nbsp;v,&nbsp;cap,&nbsp;flow,&nbsp;eh[u]};<br /></span><span style="color: #008080">&nbsp;22</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;et[tot]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;e;<br /></span><span style="color: #008080">&nbsp;23</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;eh[u]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;tot</span><span style="color: #000000">++</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;24</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">&nbsp;25</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;26</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;addedge(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;u,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;v,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;cap)&nbsp;{<br /></span><span style="color: #008080">&nbsp;27</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;add(u,&nbsp;v,&nbsp;cap,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">),&nbsp;add(v,&nbsp;u,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">);<br /></span><span style="color: #008080">&nbsp;28</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">&nbsp;29</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;30</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;isap(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;s,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;t,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;n)&nbsp;{<br /></span><span style="color: #008080">&nbsp;31</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;u,&nbsp;v,&nbsp;now,&nbsp;flow&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;32</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;memset(cnt,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(cnt));<br /></span><span style="color: #008080">&nbsp;33</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;memset(low,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(low));<br /></span><span style="color: #008080">&nbsp;34</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;memset(dist,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(dist));<br /></span><span style="color: #008080">&nbsp;35</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(u&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;u&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;n;&nbsp;u</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;cur[u]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;eh[u];<br /></span><span style="color: #008080">&nbsp;36</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;u&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;s,&nbsp;low[s]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;inf,&nbsp;cnt[</span><span style="color: #000000">0</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;n;<br /></span><span style="color: #008080">&nbsp;37</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(dist[s]&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;n)&nbsp;{<br /></span><span style="color: #008080">&nbsp;38</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(now&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;cur[u];&nbsp;now&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">;&nbsp;now&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;et[now].next)<br /></span><span style="color: #008080">&nbsp;39</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(et[now].cap&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;et[now].flow&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;dist[u]&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;dist[v&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;et[now].v]&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">break</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;40</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(now&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">&nbsp;41</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cur[u]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;pre[v]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;now;<br /></span><span style="color: #008080">&nbsp;42</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;low[v]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;min(low[u],&nbsp;et[now].cap&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;et[now].flow);<br /></span><span style="color: #008080">&nbsp;43</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;v;<br /></span><span style="color: #008080">&nbsp;44</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(u&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;t)&nbsp;{<br /></span><span style="color: #008080">&nbsp;45</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(flow&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;low[t];&nbsp;u&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;s;&nbsp;u&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;et[pre[u]].u)&nbsp;{<br /></span><span style="color: #008080">&nbsp;46</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;et[pre[u]].flow&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;low[t];<br /></span><span style="color: #008080">&nbsp;47</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;et[pre[u]</span><span style="color: #000000">^</span><span style="color: #000000">1</span><span style="color: #000000">].flow&nbsp;</span><span style="color: #000000">-=</span><span style="color: #000000">&nbsp;low[t];<br /></span><span style="color: #008080">&nbsp;48</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;49</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;50</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;{<br /></span><span style="color: #008080">&nbsp;51</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">--</span><span style="color: #000000">cnt[dist[u]]&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">break</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;52</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[u]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;n,&nbsp;cur[u]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;eh[u];<br /></span><span style="color: #008080">&nbsp;53</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(now&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;eh[u];&nbsp;now&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">;&nbsp;now&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;et[now].next)<br /></span><span style="color: #008080">&nbsp;54</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(et[now].cap&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;et[now].flow&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;dist[u]&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;dist[et[now].v]&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">)<br /></span><span style="color: #008080">&nbsp;55</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[u]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;dist[et[now].v]&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;56</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnt[dist[u]]</span><span style="color: #000000">++</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;57</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(u&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;s)&nbsp;u&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;et[pre[u]].u;<br /></span><span style="color: #008080">&nbsp;58</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;59</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;60</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;flow;<br /></span><span style="color: #008080">&nbsp;61</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">&nbsp;62</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;63</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;build()&nbsp;{<br /></span><span style="color: #008080">&nbsp;64</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;t&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;n&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;m&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;n&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;n&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;m&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;65</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;n;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">&nbsp;66</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;j&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;&nbsp;j&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;m;&nbsp;j</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">&nbsp;67</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(ins[i][j]&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">&nbsp;68</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addedge(s,&nbsp;(i&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;m&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;j,&nbsp;ins[i][j]);<br /></span><span style="color: #008080">&nbsp;69</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;ins[i][j];<br /></span><span style="color: #008080">&nbsp;70</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;addedge((i&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;m&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;j,&nbsp;t,&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">ins[i][j]);<br /></span><span style="color: #008080">&nbsp;71</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(j&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;addedge((i&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;m&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;j,&nbsp;(i&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;m&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;j&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;inf);<br /></span><span style="color: #008080">&nbsp;72</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;73</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;74</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;n;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">&nbsp;75</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;j&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;&nbsp;j&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;n;&nbsp;j</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">&nbsp;76</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;k&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;&nbsp;k&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;m;&nbsp;k</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">&nbsp;77</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addedge(s,&nbsp;n&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;m&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;((i&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;n&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;j&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;m&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;k,&nbsp;bonus[i][j]);<br /></span><span style="color: #008080">&nbsp;78</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addedge(n&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;m&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;((i&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;n&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;j&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;m&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;k,&nbsp;(i&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;m&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;k,&nbsp;inf);<br /></span><span style="color: #008080">&nbsp;79</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addedge(n&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;m&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;((i&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;n&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;j&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;m&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;k,&nbsp;(j&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;m&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;k,&nbsp;inf);<br /></span><span style="color: #008080">&nbsp;80</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;bonus[i][j];<br /></span><span style="color: #008080">&nbsp;81</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;82</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;83</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;84</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">&nbsp;85</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;86</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;main()&nbsp;{<br /></span><span style="color: #008080">&nbsp;87</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(</span><span style="color: #000000">~</span><span style="color: #000000">scanf(</span><span style="color: #000000">"</span><span style="color: #000000">%d%d</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">n,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">m))&nbsp;{<br /></span><span style="color: #008080">&nbsp;88</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">n&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">!</span><span style="color: #000000">m)&nbsp;</span><span style="color: #0000ff">break</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;89</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();<br /></span><span style="color: #008080">&nbsp;90</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;m;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;scanf(</span><span style="color: #000000">"</span><span style="color: #000000">%d</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">cost[i]);<br /></span><span style="color: #008080">&nbsp;91</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;n;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">&nbsp;92</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;j&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;&nbsp;j&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;m;&nbsp;j</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">&nbsp;93</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000">"</span><span style="color: #000000">%d</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">ins[i][j]);<br /></span><span style="color: #008080">&nbsp;94</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ins[i][j]&nbsp;</span><span style="color: #000000">-=</span><span style="color: #000000">&nbsp;cost[j];<br /></span><span style="color: #008080">&nbsp;95</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;96</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;97</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;n;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;<br /></span><span style="color: #008080">&nbsp;98</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;j&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;&nbsp;j&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;n;&nbsp;j</span><span style="color: #000000">++</span><span style="color: #000000">)<br /></span><span style="color: #008080">&nbsp;99</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000">"</span><span style="color: #000000">%d</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">bonus[i][j]);<br /></span><span style="color: #008080">100</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;build();<br /></span><span style="color: #008080">101</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;res&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;isap(s,&nbsp;t,&nbsp;t&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;s&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">);<br /></span><span style="color: #008080">102</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(res&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;sum)&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">STAY&nbsp;HOME\n</span><span style="color: #000000">"</span><span style="color: #000000">);<br /></span><span style="color: #008080">103</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">%d\n</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;sum&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;res);<br /></span><span style="color: #008080">104</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">105</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">106</span>&nbsp;<span style="color: #000000">}</span></div>
<p align="left"><br />&nbsp;</p><img src ="http://www.cppblog.com/y346491470/aggbug/158693.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2011-10-19 16:24 <a href="http://www.cppblog.com/y346491470/articles/158693.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>poj 1201 Intervals - 差分约束系统</title><link>http://www.cppblog.com/y346491470/articles/158575.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Mon, 17 Oct 2011 12:02:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/158575.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/158575.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/158575.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/158575.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/158575.html</trackback:ping><description><![CDATA[<div>【题意】：给出一个数集合Z与n个区间,每个区间表示为[ai,bi,ci].[ai,bi,ci]表示闭区间[ai,bi]与Z至少有ci个相同的数，求出数集Z可能的最少元素个数。<br />&nbsp;<br />【题解】：从题目中，我们可以抽象出一大堆约束条件，并且ci的定义上明显包含着不等关系。于是可以利用差分约束模型来解决。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8226;(1) [ai,bi,ci]中,ai和bi最小可以取到0,为了方便，把所有的ai,bi都+1.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8226;(2) 定义d[i]为闭区间[1,i]中与集合Z中共同元素的个数.要求Z的元素个数最少,就是要求d[max{bi}]-d[0]最小.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8226;(3) 分析不等关系：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;对于[ai,bi,ci],有d[bi]-d[ai-1] &gt;= ci<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;对于每个i,有1 &gt;= d[i]-d[i-1] &gt;= 0<br /><br />【代码】：
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">&nbsp;1</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">iostream</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;2</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">cstdio</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;3</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">cstring</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;4</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">queue</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;5</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;std;<br /></span><span style="color: #008080">&nbsp;6</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;inf&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">30</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;7</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">#define</span><span style="color: #000000">&nbsp;maxn&nbsp;50500</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;8</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">#define</span><span style="color: #000000">&nbsp;maxm&nbsp;500000</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;9</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;n,&nbsp;m,&nbsp;l,&nbsp;r;<br /></span><span style="color: #008080">10</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;eh[maxn],&nbsp;tot,&nbsp;dist[maxn];<br /></span><span style="color: #008080">11</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;visit[maxn];<br /></span><span style="color: #008080">12</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">struct</span><span style="color: #000000">&nbsp;Edge&nbsp;{<br /></span><span style="color: #008080">13</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;u,&nbsp;v,&nbsp;w,&nbsp;next;<br /></span><span style="color: #008080">14</span>&nbsp;<span style="color: #000000">}et[maxm];<br /></span><span style="color: #008080">15</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">16</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;init()&nbsp;{<br /></span><span style="color: #008080">17</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;tot&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">18</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;memset(eh,&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(eh));<br /></span><span style="color: #008080">19</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">20</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">21</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;addedge(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;u,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;v,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;w)&nbsp;{<br /></span><span style="color: #008080">22</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Edge&nbsp;e&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;{u,&nbsp;v,&nbsp;w,&nbsp;eh[u]};<br /></span><span style="color: #008080">23</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;et[tot]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;e;<br /></span><span style="color: #008080">24</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;eh[u]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;tot</span><span style="color: #000000">++</span><span style="color: #000000">;<br /></span><span style="color: #008080">25</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">26</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">27</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;spfa(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;s)&nbsp;{<br /></span><span style="color: #008080">28</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;queue</span><span style="color: #000000">&lt;</span><span style="color: #0000ff">int</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;que;<br /></span><span style="color: #008080">29</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;fill(</span><span style="color: #000000">&amp;</span><span style="color: #000000">dist[</span><span style="color: #000000">0</span><span style="color: #000000">],&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">dist[maxn],&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">inf);<br /></span><span style="color: #008080">30</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;memset(visit,&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(visit));<br /></span><span style="color: #008080">31</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;dist[s]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;visit[s]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br /></span><span style="color: #008080">32</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;que.push(s);<br /></span><span style="color: #008080">33</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">que.empty())&nbsp;{<br /></span><span style="color: #008080">34</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;u&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;que.front();<br /></span><span style="color: #008080">35</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;que.pop();<br /></span><span style="color: #008080">36</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visit[u]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br /></span><span style="color: #008080">37</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;eh[u];&nbsp;i&nbsp;</span><span style="color: #000000">!=-</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;et[i].next)&nbsp;{<br /></span><span style="color: #008080">38</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;v&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;et[i].v,&nbsp;w&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;et[i].w;<br /></span><span style="color: #008080">39</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(dist[v]&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;dist[u]&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;w)&nbsp;{<br /></span><span style="color: #008080">40</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[v]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;dist[u]&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;w;<br /></span><span style="color: #008080">41</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">visit[v])&nbsp;{<br /></span><span style="color: #008080">42</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;que.push(v);<br /></span><span style="color: #008080">43</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visit[v]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br /></span><span style="color: #008080">44</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">45</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">46</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">47</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">48</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">49</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">50</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;main()&nbsp;{<br /></span><span style="color: #008080">51</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;a,&nbsp;b,&nbsp;c;<br /></span><span style="color: #008080">52</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(</span><span style="color: #000000">~</span><span style="color: #000000">scanf(</span><span style="color: #000000">"</span><span style="color: #000000">%d</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">n))&nbsp;{<br /></span><span style="color: #008080">53</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();<br /></span><span style="color: #008080">54</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">55</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;l&nbsp;=&nbsp;inf;</span><span style="color: #008000"><br /></span><span style="color: #008080">56</span>&nbsp;<span style="color: #008000"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;n;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">57</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000">"</span><span style="color: #000000">%d%d%d</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">a,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">b,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">c);<br /></span><span style="color: #008080">58</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;max(r,&nbsp;</span><span style="color: #000000">++</span><span style="color: #000000">b);<br /></span><span style="color: #008080">59</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l&nbsp;=&nbsp;min(l,&nbsp;a);</span><span style="color: #008000"><br /></span><span style="color: #008080">60</span>&nbsp;<span style="color: #008000"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addedge(a,&nbsp;b,&nbsp;c);<br /></span><span style="color: #008080">61</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">62</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;r;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">63</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addedge(i&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;i,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">);<br /></span><span style="color: #008080">64</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addedge(i,&nbsp;i&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">);<br /></span><span style="color: #008080">65</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">66</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spfa(</span><span style="color: #000000">0</span><span style="color: #000000">);<br /></span><span style="color: #008080">67</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">%d\n</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;dist[r]);<br /></span><span style="color: #008080">68</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">69</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">70</span>&nbsp;<span style="color: #000000">}</span></div><br /><br /></div><img src ="http://www.cppblog.com/y346491470/aggbug/158575.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2011-10-17 20:02 <a href="http://www.cppblog.com/y346491470/articles/158575.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hdoj 3666 THE MATRIX PROBLEM - 差分约束系统 + dfs版spfa</title><link>http://www.cppblog.com/y346491470/articles/158557.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Mon, 17 Oct 2011 08:48:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/158557.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/158557.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/158557.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/158557.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/158557.html</trackback:ping><description><![CDATA[<div>【题意】：给出一个N*M的矩阵C，C中每个元素都是正整数且不超过1000.问是否存在一个长度为N的序列a1，a2，&#8230;&#8230;，a<sub>N</sub>和一个长度为M的序列b1，b2，&#8230;&#8230;，b<sub>M</sub>使得矩阵C中的每一个元素C<sub>ij</sub>满足 L &lt;= C<sub>ij</sub> * a<sub>i</sub> / b<sub>j </sub>&lt;= U。<br /><br />【题解】：从题目中可以抽离出N * M个不等式，然后题目又要我们判断可行解，这样子很容易就想到差分约束系统。对于这个不等式，我们需要做点转化，用一个log化简一下即可。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;L &lt;= C<sub>ij</sub> * a<sub>i</sub> / b<sub>j </sub>&lt;= U&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; log L - log C<sub>ij </sub>&lt;= log a<sub>i</sub> - log b<sub>j</sub> &lt;= log U - log C<sub>ij</sub>.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;然后构图找判负环即可，但是这个N*M高达800，所以queue的spfa会TLE，这里采用stack的spfa。<br /><br />【代码】：
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">&nbsp;1</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">iostream</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;2</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">cstring</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;3</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">cstdio</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;4</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">cmath</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;5</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;std;<br /></span><span style="color: #008080">&nbsp;6</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">#define</span><span style="color: #000000">&nbsp;maxn&nbsp;1000</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;7</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">#define</span><span style="color: #000000">&nbsp;maxm&nbsp;1000000</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;8</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;inf&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">30</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;9</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;n,&nbsp;m,&nbsp;s;<br /></span><span style="color: #008080">10</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;l,&nbsp;u;<br /></span><span style="color: #008080">11</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;visit[maxn];<br /></span><span style="color: #008080">12</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;eh[maxn],&nbsp;tot;<br /></span><span style="color: #008080">13</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;dist[maxn];<br /></span><span style="color: #008080">14</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">struct</span><span style="color: #000000">&nbsp;Edge&nbsp;{<br /></span><span style="color: #008080">15</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;u,&nbsp;v;<br /></span><span style="color: #008080">16</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;cost;<br /></span><span style="color: #008080">17</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;next;<br /></span><span style="color: #008080">18</span>&nbsp;<span style="color: #000000">}et[maxm];<br /></span><span style="color: #008080">19</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">20</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;init()&nbsp;{<br /></span><span style="color: #008080">21</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;tot&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">22</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;memset(eh,&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(eh));<br /></span><span style="color: #008080">23</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">24</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">25</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;addedge(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;u,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;v,&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;cost)&nbsp;{<br /></span><span style="color: #008080">26</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Edge&nbsp;e&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;{u,&nbsp;v,&nbsp;cost,&nbsp;eh[u]};<br /></span><span style="color: #008080">27</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;et[tot]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;e;<br /></span><span style="color: #008080">28</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;eh[u]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;tot</span><span style="color: #000000">++</span><span style="color: #000000">;<br /></span><span style="color: #008080">29</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">30</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;instack[maxn];<br /></span><span style="color: #008080">31</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;dfs_spfa(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;u)&nbsp;{<br /></span><span style="color: #008080">32</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(instack[u])&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br /></span><span style="color: #008080">33</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;instack[u]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br /></span><span style="color: #008080">34</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;visit[u]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br /></span><span style="color: #008080">35</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;eh[u];&nbsp;i&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;et[i].next)&nbsp;{<br /></span><span style="color: #008080">36</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;v&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;et[i].v;<br /></span><span style="color: #008080">37</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;cost&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;et[i].cost;<br /></span><span style="color: #008080">38</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(dist[v]&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;dist[u]&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;cost)&nbsp;{<br /></span><span style="color: #008080">39</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[v]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;dist[u]&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;cost;<br /></span><span style="color: #008080">40</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">dfs_spfa(v))&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br /></span><span style="color: #008080">41</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">42</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">43</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;instack[u]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br /></span><span style="color: #008080">44</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br /></span><span style="color: #008080">45</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">46</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">47</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;solve()&nbsp;{<br /></span><span style="color: #008080">48</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;memset(visit,&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(visit));<br /></span><span style="color: #008080">49</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;memset(instack,&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(instack));<br /></span><span style="color: #008080">50</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;memset(dist,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(dist));<br /></span><span style="color: #008080">51</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;n&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;m;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">52</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">visit[i])<br /></span><span style="color: #008080">53</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">dfs_spfa(i))&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br /></span><span style="color: #008080">54</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">55</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br /></span><span style="color: #008080">56</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">57</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">58</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;main()&nbsp;{<br /></span><span style="color: #008080">59</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;tmp;<br /></span><span style="color: #008080">60</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(scanf(</span><span style="color: #000000">"</span><span style="color: #000000">%d%d%lf%lf</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">n,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">m,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">l,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">u)&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;EOF)&nbsp;{<br /></span><span style="color: #008080">61</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();<br /></span><span style="color: #008080">62</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;n;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">63</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;j&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;&nbsp;j&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;m;&nbsp;j</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">64</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000">"</span><span style="color: #000000">%lf</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">tmp);<br /></span><span style="color: #008080">65</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addedge(j&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;n,&nbsp;i,&nbsp;log(u&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;tmp));<br /></span><span style="color: #008080">66</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addedge(i,&nbsp;j&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;n,&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">log(l&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;tmp));<br /></span><span style="color: #008080">67</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">68</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">69</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(solve())&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">YES\n</span><span style="color: #000000">"</span><span style="color: #000000">);<br /></span><span style="color: #008080">70</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">NO\n</span><span style="color: #000000">"</span><span style="color: #000000">);<br /></span><span style="color: #008080">71</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">72</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">73</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">74</span>&nbsp;<span style="color: #000000">}</span></div></div><img src ="http://www.cppblog.com/y346491470/aggbug/158557.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2011-10-17 16:48 <a href="http://www.cppblog.com/y346491470/articles/158557.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>poj 3207 Ikki's Story IV - Panda's Trick - 2-Sat</title><link>http://www.cppblog.com/y346491470/articles/158547.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Mon, 17 Oct 2011 07:52:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/158547.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/158547.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/158547.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/158547.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/158547.html</trackback:ping><description><![CDATA[【题意】：平面上，一个圆，圆的边上按顺时针放着n个点。现在要连m条边，比如a，b，那么a到b可以从圆的内部连接，也可以从圆的外部连接。给你的信息中，每个点最多只会连接的一条边。问能不能连接这m条边，使这些边都不相交。<br /><br />【题解】：题意可能刚开始不是很好理解，比如1和5连边，2和6连边，由于点是顺序排列的，一画图就可以发现，这两条边必须一个从圆外面连，一个从内部连，否则就会相交。如果再加入3和7这条边，那么就必须相交了。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这样，我们很容易把问题转化为一个标准的2-sat问题，把每条边看成2-sat中的点，i 表示这条边从圆的内部连边，i&#8217; 表示从圆的外部连边。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果某两条边 i&nbsp; 和 j 有矛盾关系（既只能一个从内部连边，一个从外部连边），那么我们可以这样连边:&nbsp;i -&gt; j' , i' -&gt; j, j -&gt; i', j' -&gt; i.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最后判断一下有无可行解即可。<br /><br />【代码】：
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">&nbsp;1</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">iostream</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;2</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">cstdio</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;3</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">cstring</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;4</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">vector</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;5</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;std;<br /></span><span style="color: #008080">&nbsp;6</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">#define</span><span style="color: #000000">&nbsp;maxn&nbsp;1050</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;7</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;n,&nbsp;m;<br /></span><span style="color: #008080">&nbsp;8</span>&nbsp;<span style="color: #000000">vector</span><span style="color: #000000">&lt;</span><span style="color: #0000ff">int</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;vec[maxn];<br /></span><span style="color: #008080">&nbsp;9</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;s[maxn],&nbsp;top;<br /></span><span style="color: #008080">10</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;belong[maxn],&nbsp;scc,&nbsp;dfn[maxn],&nbsp;low[maxn],&nbsp;Dindex;<br /></span><span style="color: #008080">11</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;instack[maxn];<br /></span><span style="color: #008080">12</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">struct</span><span style="color: #000000">&nbsp;Line&nbsp;{<br /></span><span style="color: #008080">13</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;a,&nbsp;b;<br /></span><span style="color: #008080">14</span>&nbsp;<span style="color: #000000">}line[maxn];<br /></span><span style="color: #008080">15</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">16</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;dfs(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;u)&nbsp;{<br /></span><span style="color: #008080">17</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;v,&nbsp;size&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;vec[u].size();<br /></span><span style="color: #008080">18</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;dfn[u]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;low[u]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">++</span><span style="color: #000000">Dindex;<br /></span><span style="color: #008080">19</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;instack[u]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br /></span><span style="color: #008080">20</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;s[</span><span style="color: #000000">++</span><span style="color: #000000">top]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;u;<br /></span><span style="color: #008080">21</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;size;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">22</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;vec[u][i];<br /></span><span style="color: #008080">23</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">dfn[v])&nbsp;dfs(v),&nbsp;low[u]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;min(low[u],&nbsp;low[v]);<br /></span><span style="color: #008080">24</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(instack[v])&nbsp;low[u]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;min(low[u],&nbsp;dfn[v]);&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">25</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">26</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(dfn[u]&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;low[u])&nbsp;{<br /></span><span style="color: #008080">27</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scc</span><span style="color: #000000">++</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">28</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">do</span><span style="color: #000000">&nbsp;{<br /></span><span style="color: #008080">29</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;s[top</span><span style="color: #000000">--</span><span style="color: #000000">];<br /></span><span style="color: #008080">30</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;instack[v]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br /></span><span style="color: #008080">31</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;belong[v]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;scc;<br /></span><span style="color: #008080">32</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #0000ff">while</span><span style="color: #000000">(v&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;u);<br /></span><span style="color: #008080">33</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">34</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">35</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;tarjan()&nbsp;{<br /></span><span style="color: #008080">36</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;top&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;scc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Dindex&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">37</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;memset(dfn,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(dfn));<br /></span><span style="color: #008080">38</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;memset(instack,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(instack));<br /></span><span style="color: #008080">39</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;u&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;u&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;m;&nbsp;u</span><span style="color: #000000">++</span><span style="color: #000000">)<br /></span><span style="color: #008080">40</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">dfn[u])&nbsp;dfs(u);<br /></span><span style="color: #008080">41</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">42</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">43</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;solvable()&nbsp;{<br /></span><span style="color: #008080">44</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;m;&nbsp;i&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">)&nbsp;<br /></span><span style="color: #008080">45</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(belong[i]&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;belong[i</span><span style="color: #000000">^</span><span style="color: #000000">1</span><span style="color: #000000">])&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br /></span><span style="color: #008080">46</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br /></span><span style="color: #008080">47</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">48</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">49</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;conflict(Line&nbsp;a,&nbsp;Line&nbsp;b)&nbsp;{<br /></span><span style="color: #008080">50</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(a.a&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;b.b&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;a.b&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;b.a&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;(a.a&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;b.a&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;a.b&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;b.b)&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;(a.a&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;b.a&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;a.b&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;b.b))&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br /></span><span style="color: #008080">51</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br /></span><span style="color: #008080">52</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">53</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">54</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;build()&nbsp;{<br /></span><span style="color: #008080">55</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;m;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">56</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;j&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;&nbsp;j&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;m;&nbsp;j</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">57</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;u&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;i,&nbsp;v&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;j;<br /></span><span style="color: #008080">58</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(conflict(line[i],&nbsp;line[j]))&nbsp;{<br /></span><span style="color: #008080">59</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vec[u].push_back(v</span><span style="color: #000000">^</span><span style="color: #000000">1</span><span style="color: #000000">),&nbsp;vec[u</span><span style="color: #000000">^</span><span style="color: #000000">1</span><span style="color: #000000">].push_back(v);<br /></span><span style="color: #008080">60</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vec[v].push_back(u</span><span style="color: #000000">^</span><span style="color: #000000">1</span><span style="color: #000000">),&nbsp;vec[v</span><span style="color: #000000">^</span><span style="color: #000000">1</span><span style="color: #000000">].push_back(u);<br /></span><span style="color: #008080">61</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">62</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">63</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">64</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">65</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">66</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;main()&nbsp;{<br /></span><span style="color: #008080">67</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;maxn;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;vec[i].clear();<br /></span><span style="color: #008080">68</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000">"</span><span style="color: #000000">%d%d</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">n,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">m);<br /></span><span style="color: #008080">69</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;m;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">70</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000">"</span><span style="color: #000000">%d%d</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">line[i].a,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">line[i].b);<br /></span><span style="color: #008080">71</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(line[i].a&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;line[i].b)&nbsp;swap(line[i].a,&nbsp;line[i].b);<br /></span><span style="color: #008080">72</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">73</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;build();<br /></span><span style="color: #008080">74</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;tarjan();<br /></span><span style="color: #008080">75</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(solvable())&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">panda&nbsp;is&nbsp;telling&nbsp;the&nbsp;truth<img src="http://www.cppblog.com/Images/dot.gif"  alt="" />\n</span><span style="color: #000000">"</span><span style="color: #000000">);<br /></span><span style="color: #008080">76</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">the&nbsp;evil&nbsp;panda&nbsp;is&nbsp;lying&nbsp;again\n</span><span style="color: #000000">"</span><span style="color: #000000">);<br /></span><span style="color: #008080">77</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">78</span>&nbsp;<span style="color: #000000">}</span></div><br /><img src ="http://www.cppblog.com/y346491470/aggbug/158547.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2011-10-17 15:52 <a href="http://www.cppblog.com/y346491470/articles/158547.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>poj 3648 Wedding - 2-Sat</title><link>http://www.cppblog.com/y346491470/articles/158545.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Mon, 17 Oct 2011 07:35:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/158545.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/158545.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/158545.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/158545.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/158545.html</trackback:ping><description><![CDATA[<div>【题意】：有一对新人结婚，邀请n对夫妇去参加婚礼。有一张很长的桌子，人只能坐在桌子的两边，还要满足下面的要求：1.每对夫妇不能坐在同一侧 2.n对夫妇之中可能有通奸关系（包括男男，男女，女女），有通奸关系的不能同时坐在新娘的对面，可以分开坐，可以同时坐在新娘这一侧。如果存在一种可行的方案，输出与新娘同侧的人。<br /><br />【题解】：比较明显的2-sat，我们可以把问题转化为求坐在新娘对面的人的可行方案。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;对于m对有通奸关系的x 和 y，连边x-&gt;y', y-&gt;x'.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最后新娘向新郎连一条边，表示新郎一定要坐在新娘的对面，然后就是解2-sat的基本步骤了，输出方案时利用染色把与新娘同色的人输出。<br /><br />【代码】：
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">&nbsp;&nbsp;1</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">iostream</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;&nbsp;2</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">cstring</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;&nbsp;3</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">cstdio</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;&nbsp;4</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">vector</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;&nbsp;5</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;std;<br /></span><span style="color: #008080">&nbsp;&nbsp;6</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">#define</span><span style="color: #000000">&nbsp;maxn&nbsp;5010</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;&nbsp;7</span>&nbsp;<span style="color: #000000">vector</span><span style="color: #000000">&lt;</span><span style="color: #0000ff">int</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;vec[maxn],&nbsp;rvec[maxn],&nbsp;dag[maxn];<br /></span><span style="color: #008080">&nbsp;&nbsp;8</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;belong[maxn],&nbsp;scc,&nbsp;top,&nbsp;s[maxn],&nbsp;color[maxn];<br /></span><span style="color: #008080">&nbsp;&nbsp;9</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;n,&nbsp;m;<br /></span><span style="color: #008080">&nbsp;10</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;visit[maxn];<br /></span><span style="color: #008080">&nbsp;11</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;init()&nbsp;{<br /></span><span style="color: #008080">&nbsp;12</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;maxn;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;vec[i].clear(),&nbsp;rvec[i].clear(),&nbsp;dag[i].clear();<br /></span><span style="color: #008080">&nbsp;13</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">&nbsp;14</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;cal(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;a,&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;ch)&nbsp;{<br /></span><span style="color: #008080">&nbsp;15</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;res&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;16</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(ch&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">h</span><span style="color: #000000">'</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;res;<br /></span><span style="color: #008080">&nbsp;17</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;res&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;18</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">&nbsp;19</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;dfs1(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;u)&nbsp;{<br /></span><span style="color: #008080">&nbsp;20</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;visit[u]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;21</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;size&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;vec[u].size();<br /></span><span style="color: #008080">&nbsp;22</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;size;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">&nbsp;23</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;v&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;vec[u][i];<br /></span><span style="color: #008080">&nbsp;24</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">visit[v])&nbsp;dfs1(v);<br /></span><span style="color: #008080">&nbsp;25</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;26</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;s[</span><span style="color: #000000">++</span><span style="color: #000000">top]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;u;<br /></span><span style="color: #008080">&nbsp;27</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">&nbsp;28</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;dfs2(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;u)&nbsp;{<br /></span><span style="color: #008080">&nbsp;29</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;visit[u]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;30</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;size&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;rvec[u].size();<br /></span><span style="color: #008080">&nbsp;31</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;size;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">&nbsp;32</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;v&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;rvec[u][i];<br /></span><span style="color: #008080">&nbsp;33</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">visit[v])&nbsp;dfs2(v);<br /></span><span style="color: #008080">&nbsp;34</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;35</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;belong[u]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;scc;<br /></span><span style="color: #008080">&nbsp;36</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">&nbsp;37</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;kosaraju()&nbsp;{<br /></span><span style="color: #008080">&nbsp;38</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;scc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;top&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;39</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;memset(visit,&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(visit));<br /></span><span style="color: #008080">&nbsp;40</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;n;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;<br /></span><span style="color: #008080">&nbsp;41</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">visit[i])&nbsp;dfs1(i);<br /></span><span style="color: #008080">&nbsp;42</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;memset(visit,&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(visit));<br /></span><span style="color: #008080">&nbsp;43</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;n;&nbsp;i;&nbsp;i</span><span style="color: #000000">--</span><span style="color: #000000">)&nbsp;<br /></span><span style="color: #008080">&nbsp;44</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">visit[s[i]])&nbsp;scc</span><span style="color: #000000">++</span><span style="color: #000000">,&nbsp;dfs2(s[i]);<br /></span><span style="color: #008080">&nbsp;45</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;u&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;u&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;n;&nbsp;u</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">&nbsp;46</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;size&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;rvec[u].size();<br /></span><span style="color: #008080">&nbsp;47</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;size;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">&nbsp;48</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;v&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;rvec[u][i];<br /></span><span style="color: #008080">&nbsp;49</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(belong[u]&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;belong[v])&nbsp;dag[belong[u]].push_back(belong[v]);<br /></span><span style="color: #008080">&nbsp;50</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;51</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;52</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">&nbsp;53</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;solvable()&nbsp;{<br /></span><span style="color: #008080">&nbsp;54</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;n;&nbsp;i&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">)<br /></span><span style="color: #008080">&nbsp;55</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(belong[i]&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;belong[i</span><span style="color: #000000">+</span><span style="color: #000000">1</span><span style="color: #000000">])&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;56</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;57</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">&nbsp;58</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;dfs(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;u)&nbsp;{<br /></span><span style="color: #008080">&nbsp;59</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;color[u]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;60</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;size&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;dag[u].size();<br /></span><span style="color: #008080">&nbsp;61</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;size;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">&nbsp;62</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;v&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;dag[u][i];<br /></span><span style="color: #008080">&nbsp;63</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">color[v])&nbsp;dfs(v);<br /></span><span style="color: #008080">&nbsp;64</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;65</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">&nbsp;66</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;solve()&nbsp;{<br /></span><span style="color: #008080">&nbsp;67</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;memset(color,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(color));<br /></span><span style="color: #008080">&nbsp;68</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;scc;&nbsp;i;&nbsp;i</span><span style="color: #000000">--</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">&nbsp;69</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">color[i])&nbsp;{<br /></span><span style="color: #008080">&nbsp;70</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color[i]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;71</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;j&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;j&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;n;&nbsp;j</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">&nbsp;72</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(belong[j]&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;i)&nbsp;{<br /></span><span style="color: #008080">&nbsp;73</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;k&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;belong[j</span><span style="color: #000000">^</span><span style="color: #000000">1</span><span style="color: #000000">];<br /></span><span style="color: #008080">&nbsp;74</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">color[k])&nbsp;dfs(k);<br /></span><span style="color: #008080">&nbsp;75</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;76</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;77</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;78</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;79</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;n;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)<br /></span><span style="color: #008080">&nbsp;80</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(color[belong[i]]&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;color[belong[</span><span style="color: #000000">1</span><span style="color: #000000">]])<br /></span><span style="color: #008080">&nbsp;81</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">%d%c&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;i&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">,&nbsp;i&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">w</span><span style="color: #000000">'</span><span style="color: #000000">&nbsp;:&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">h</span><span style="color: #000000">'</span><span style="color: #000000">);<br /></span><span style="color: #008080">&nbsp;82</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">\n</span><span style="color: #000000">"</span><span style="color: #000000">);<br /></span><span style="color: #008080">&nbsp;83</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">&nbsp;84</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;debug()&nbsp;{<br /></span><span style="color: #008080">&nbsp;85</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;n;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">&nbsp;86</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;size&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;vec[i].size();<br /></span><span style="color: #008080">&nbsp;87</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;j&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;j&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;size;&nbsp;j</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">&nbsp;88</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">-&gt;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;vec[i][j]&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;endl;<br /></span><span style="color: #008080">&nbsp;89</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;90</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;91</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;endl;<br /></span><span style="color: #008080">&nbsp;92</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;scc;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">&nbsp;93</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;size&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;dag[i].size();<br /></span><span style="color: #008080">&nbsp;94</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;j&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;j&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;size;&nbsp;j</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">&nbsp;95</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">-&gt;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;dag[i][j]&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;endl;<br /></span><span style="color: #008080">&nbsp;96</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;97</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;98</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">&nbsp;99</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;main()&nbsp;{<br /></span><span style="color: #008080">100</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;ch1,&nbsp;ch2;<br /></span><span style="color: #008080">101</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;a,&nbsp;b;<br /></span><span style="color: #008080">102</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(</span><span style="color: #000000">~</span><span style="color: #000000">scanf(</span><span style="color: #000000">"</span><span style="color: #000000">%d%d</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">n,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">m))&nbsp;{<br /></span><span style="color: #008080">103</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getchar();<br /></span><span style="color: #008080">104</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">n&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">!</span><span style="color: #000000">m)&nbsp;</span><span style="color: #0000ff">break</span><span style="color: #000000">;<br /></span><span style="color: #008080">105</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();<br /></span><span style="color: #008080">106</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;m;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">107</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000">"</span><span style="color: #000000">%d%c%d%c</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">a,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">ch1,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">b,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">ch2);<br /></span><span style="color: #008080">108</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getchar();<br /></span><span style="color: #008080">109</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;u&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;cal(a,&nbsp;ch1),&nbsp;v&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;cal(b,&nbsp;ch2);<br /></span><span style="color: #008080">110</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vec[u].push_back(v</span><span style="color: #000000">^</span><span style="color: #000000">1</span><span style="color: #000000">),&nbsp;vec[v].push_back(u</span><span style="color: #000000">^</span><span style="color: #000000">1</span><span style="color: #000000">);<br /></span><span style="color: #008080">111</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rvec[v</span><span style="color: #000000">^</span><span style="color: #000000">1</span><span style="color: #000000">].push_back(u),&nbsp;rvec[u</span><span style="color: #000000">^</span><span style="color: #000000">1</span><span style="color: #000000">].push_back(v);<br /></span><span style="color: #008080">112</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">113</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vec[</span><span style="color: #000000">1</span><span style="color: #000000">].push_back(</span><span style="color: #000000">0</span><span style="color: #000000">),&nbsp;rvec[</span><span style="color: #000000">0</span><span style="color: #000000">].push_back(</span><span style="color: #000000">1</span><span style="color: #000000">);<br /></span><span style="color: #008080">114</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kosaraju();<br /></span><span style="color: #008080">115</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(solvable())&nbsp;solve();<br /></span><span style="color: #008080">116</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">bad&nbsp;luck\n</span><span style="color: #000000">"</span><span style="color: #000000">);<br /></span><span style="color: #008080">117</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">118</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">119</span>&nbsp;<span style="color: #000000">}</span></div><br /></div><img src ="http://www.cppblog.com/y346491470/aggbug/158545.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2011-10-17 15:35 <a href="http://www.cppblog.com/y346491470/articles/158545.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>