﻿<?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++博客-powerwater-文章分类-竞赛题解_HDOJ</title><link>http://www.cppblog.com/powerwater/category/17954.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 12 Jul 2016 07:01:02 GMT</lastBuildDate><pubDate>Tue, 12 Jul 2016 07:01:02 GMT</pubDate><ttl>60</ttl><item><title>HDU2063 过山车</title><link>http://www.cppblog.com/powerwater/articles/158817.html</link><dc:creator>龙在江湖</dc:creator><author>龙在江湖</author><pubDate>Fri, 21 Oct 2011 05:11:00 GMT</pubDate><guid>http://www.cppblog.com/powerwater/articles/158817.html</guid><description><![CDATA[<span style="font-size: 14pt">//</span><a href="http://acm.hdu.edu.cn/showproblem.php?pid=2063"><span style="font-size: 14pt">http://acm.hdu.edu.cn/showproblem.php?pid=2063</span></a>a<br />
<h1 style="color: #1a5cc8">过山车</h1>
<div class="panel_title" align="left"><span style="font-size: 12pt">Problem Description<br /><br /></span></div>
<div class="panel_content"><span style="font-size: 12pt">RPG girls今天和大家一起去游乐场玩，终于可以坐上梦寐以求的过山车了。可是，过山车的每一排只有两个座位，而且还有条不成文的规矩，就是每个女生必须找个个男生做partner和她同坐。但是，每个女孩都有各自的想法，举个例子把，Rabbit只愿意和XHD或PQK做partner，Grass只愿意和linle或LL做partner，PrincessSnow愿意和水域浪子或伪酷儿做partner。考虑到经费问题，boss刘决定只让找到partner的人去坐过山车，其他的人，嘿嘿，就站在下面看着吧。聪明的Acmer，你可以帮忙算算最多有多少对组合可以坐上过山车吗？</span></div>
<div class="panel_bottom">&nbsp;</div>
<div class="panel_title" align="left"><span style="font-size: 12pt">Input</span></div>
<div class="panel_content"><span style="font-size: 12pt">输入数据的第一行是三个整数K , M , N，分别表示可能的组合数目，女生的人数，男生的人数。0&lt;K&lt;=1000</span><br /><span style="font-size: 12pt">1&lt;=N 和M&lt;=500.接下来的K行，每行有两个数，分别表示女生Ai愿意和男生Bj做partner。最后一个0结束输入。</span></div>
<div class="panel_bottom">&nbsp;</div>
<div class="panel_title" align="left"><span style="font-size: 12pt">Output</span></div>
<div class="panel_content"><span style="font-size: 12pt">对于每组数据，输出一个整数，表示可以坐上过山车的最多组合数。</span></div>
<div class="panel_bottom">&nbsp;</div>
<div class="panel_title" align="left"><span style="font-size: 12pt">Sample Input</span></div>
<div class="panel_content"><pre><div style="font-family: Courier New,Courier,monospace"><span style="font-size: 12pt">6 3 3
1 1
1 2
1 3
2 1
2 3
3 1
0</span></div></pre></div>
<div class="panel_bottom"><span style="font-size: 12pt">&nbsp;Sample Output</span></div>
<div class="panel_content"><pre><div style="font-family: Courier New,Courier,monospace"><span style="font-size: 12pt">3<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"><img id="Code_Closed_Image_085103" onclick="this.style.display='none'; Code_Closed_Text_085103.style.display='none'; Code_Open_Image_085103.style.display='inline'; Code_Open_Text_085103.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" width="11" height="16"><img style="display: none" id="Code_Open_Image_085103" onclick="this.style.display='none'; Code_Open_Text_085103.style.display='none'; Code_Closed_Image_085103.style.display='inline'; Code_Closed_Text_085103.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" width="11" height="16"><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Code_Closed_Text_085103">参考程序</span><span style="display: none" id="Code_Open_Text_085103"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">#include</span><span style="color: #000000">&lt;</span><span style="color: #000000">iostream</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />#include</span><span style="color: #000000">&lt;</span><span style="color: #000000">cstring</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /></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: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;MAXN(</span><span style="color: #000000">505</span><span style="color: #000000">);<br /></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;adj[MAXN][MAXN];<br /></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;match[MAXN];<br /></span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;used[MAXN];<br /></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;matn,k,n1,n2;<br /></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;init(){<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;x,y;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;cin</span><span style="color: #000000">&gt;&gt;</span><span style="color: #000000">n1</span><span style="color: #000000">&gt;&gt;</span><span style="color: #000000">n2;<br />&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;i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;i</span><span style="color: #000000">&lt;=</span><span style="color: #000000">n1;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;adj[i][</span><span style="color: #000000">0</span><span style="color: #000000">]</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(match,</span><span style="color: #000000">0</span><span style="color: #000000">,</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(match));<br />&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;i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;i</span><span style="color: #000000">&lt;</span><span style="color: #000000">k;i</span><span style="color: #000000">++</span><span style="color: #000000">){&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cin</span><span style="color: #000000">&gt;&gt;</span><span style="color: #000000">x</span><span style="color: #000000">&gt;&gt;</span><span style="color: #000000">y;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;adj[x][</span><span style="color: #000000">++</span><span style="color: #000000">adj[x][</span><span style="color: #000000">0</span><span style="color: #000000">]]</span><span style="color: #000000">=</span><span style="color: #000000">y;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br /></span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;crosspath(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;k){<br />&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;i</span><span style="color: #000000">=</span><span style="color: #000000">1</span><span style="color: #000000">;i</span><span style="color: #000000">&lt;=</span><span style="color: #000000">adj[k][</span><span style="color: #000000">0</span><span style="color: #000000">];i</span><span style="color: #000000">++</span><span style="color: #000000">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;j</span><span style="color: #000000">=</span><span style="color: #000000">adj[k][i];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">used[j])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;used[j]</span><span style="color: #000000">=</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">match[j]</span><span style="color: #000000">||</span><span style="color: #000000">crosspath(match[j]))<br />&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;match[j]</span><span style="color: #000000">=</span><span style="color: #000000">k;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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 />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&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 />}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;hungary()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;matn</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;<br />&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;i</span><span style="color: #000000">=</span><span style="color: #000000">1</span><span style="color: #000000">;i</span><span style="color: #000000">&lt;=</span><span style="color: #000000">n1;i</span><span style="color: #000000">++</span><span style="color: #000000">){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(crosspath(i))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matn</span><span style="color: #000000">++</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(used,</span><span style="color: #000000">0</span><span style="color: #000000">,</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(used));<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;print(){<br />&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">matn</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">endl;<br />}<br /></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;main()<br />{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;(cin</span><span style="color: #000000">&gt;&gt;</span><span style="color: #000000">k</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">k){&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hungary();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&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 />}&nbsp;</span></span></div><br /></span>&nbsp;<br /></div></pre></div>
<div class="O">
<div><br />HDOJ_1068&nbsp; (二分图最大独立集=n-m/2) </div>
<div>HDOJ_1150&nbsp; (二分图最小顶点覆盖=m) </div>
<div>HDOJ_1151&nbsp; (二分图最小路径覆盖=n-m) </div>
<div>HDOJ_1281(求完美匹配 的个数) </div>
<div>HDOJ_1498(最大匹配m=遍历每个点需要的次数) </div>
<div>在二分图中求最少的点，让每条边都至少和其中的一个点关联，这就是二分图的&#8220;最小顶点覆盖&#8221;。</div>
<div>用尽量少的不相交简单路径覆盖有向无环图(DAG)G的所有顶点，这就是DAG图的最小路径覆盖问题。</div>
<div>节点数（n），最大匹配数（m）。</div></div><br /><img src ="http://www.cppblog.com/powerwater/aggbug/158817.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/powerwater/" target="_blank">龙在江湖</a> 2011-10-21 13:11 <a href="http://www.cppblog.com/powerwater/articles/158817.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>