﻿<?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++博客- </title><link>http://www.cppblog.com/Barracuda/</link><description>ACM/ICPC </description><language>zh-cn</language><lastBuildDate>Sat, 04 Apr 2026 05:38:52 GMT</lastBuildDate><pubDate>Sat, 04 Apr 2026 05:38:52 GMT</pubDate><ttl>60</ttl><item><title>一大牛的 网络最大流 程序（POJ 1273 ）</title><link>http://www.cppblog.com/Barracuda/archive/2007/03/28/20793.html</link><dc:creator>Barracuda</dc:creator><author>Barracuda</author><pubDate>Wed, 28 Mar 2007 10:52:00 GMT</pubDate><guid>http://www.cppblog.com/Barracuda/archive/2007/03/28/20793.html</guid><wfw:comment>http://www.cppblog.com/Barracuda/comments/20793.html</wfw:comment><comments>http://www.cppblog.com/Barracuda/archive/2007/03/28/20793.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/Barracuda/comments/commentRss/20793.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Barracuda/services/trackbacks/20793.html</trackback:ping><description><![CDATA[
		<p>和自己的比起来，感觉大牛的代码要精悍的多啊。<br />代码如下：<br />#include &lt;stdio.h&gt;<br />#include &lt;string.h&gt;<br />#define maxn 250<br />struct Map<br />{<br /> int f;<br /> int c;<br />}map[maxn][maxn];<br />int pre[maxn];<br />int q[maxn*maxn];<br />int v[maxn];<br />int N,M;<br />int s,t;<br />int abs( int x ){ return x &gt; 0 ? x : -x ; }<br />int min( int x, int y ){ return  x &lt; y ? x : y; }<br />void init()<br />{<br /> int i, S, E, C;<br /> memset( map, 0, sizeof(map) );<br /> for(i=0;i&lt;N;i++)<br /> {<br />  scanf( "%d%d%d", &amp;S, &amp;E, &amp;C );<br />  map[S][E].c += C;<br /> } <br />}<br />void solve()<br />{<br /> int i,j;<br /> int head,tail;<br /> s = 1;<br /> t = M;<br /> while(true)<br /> {<br />  memset( pre, 0, sizeof(pre) );<br />  head = 0, tail = 1;<br />  q[0] = s;<br />  v[s] = 1000000000;<br />  pre[s] = s;<br />  while( head &lt; tail &amp;&amp; pre[t] == 0 )<br />  {<br />   i = q[head];<br />   for( j = 1; j &lt;= M; j++ )<br />   {<br />    if( pre[j] == 0 )<br />    {<br />     if( map[i][j].f &lt; map[i][j].c )<br />      pre[j] = i , q[tail++] = j , v[j] = min( v[i], map[i][j].c-map[i][j].f );<br />     else if( map[j][i].f &gt; 0 )<br />      pre[j] = -i, q[tail++] = j , v[j] = min( v[i], map[j][i].f );<br />    }<br />            }<br />   head++;<br />  }<br />  if( pre[t] == 0 )break;</p>
		<p>  i = t;<br />  while( i != s )<br />  {<br />   j = abs( pre[i] );<br />   if( pre[i] &gt; 0 )map[j][i].f += v[t];<br />   else map[i][j].f -= v[t];<br />   i = j;<br />  }<br /> }<br /> int ans = 0;<br /> for( i = 1; i &lt;= M; i++ )ans += map[s][i].f;<br /> printf("%d\n",ans);<br />}<br />int main()<br />{<br /> while(scanf("%d%d",&amp;N,&amp;M)!=EOF)<br /> {<br />  init();<br />  solve();<br /> }<br /> return 0;<br />}<br /></p>
<img src ="http://www.cppblog.com/Barracuda/aggbug/20793.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Barracuda/" target="_blank">Barracuda</a> 2007-03-28 18:52 <a href="http://www.cppblog.com/Barracuda/archive/2007/03/28/20793.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PKU 1273 第一次写网络最大流，居然AC了</title><link>http://www.cppblog.com/Barracuda/archive/2007/03/22/20362.html</link><dc:creator>Barracuda</dc:creator><author>Barracuda</author><pubDate>Thu, 22 Mar 2007 07:18:00 GMT</pubDate><guid>http://www.cppblog.com/Barracuda/archive/2007/03/22/20362.html</guid><wfw:comment>http://www.cppblog.com/Barracuda/comments/20362.html</wfw:comment><comments>http://www.cppblog.com/Barracuda/archive/2007/03/22/20362.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cppblog.com/Barracuda/comments/commentRss/20362.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Barracuda/services/trackbacks/20362.html</trackback:ping><description><![CDATA[<p>第一次写网络最大流算法，居然做对了。<br>该算法要用到 Dijkstra 算法。<br>每次用Dijkstra算法求的一条可通过的路后，找出该路上面的最小的权值 MIN，然后将该路径上的每条边的权值 减去 MIN ，反方向的权值加 MIN （ 例如：e( v1, v2 ) 是路径上面的一条边，则Map[v1][v2] -= MIN, Map[v2][v1] += MIN ). 累计MIN， 其最后的值就是所要求的最大流。<br>当最后 在图中找不到连接 1, n 两点的路径时，算法完毕。<br><br>//2019083 whitesea 1273 Accepted 224K 15MS C++ 1880B 2007-03-22 14:56:03 <br>// PKU 1273 网络最大流 <br><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1273#include<stdio.h">http://acm.pku.edu.cn/JudgeOnline/problem?id=1273<br><br></a>#include&lt;stdio.h&gt;<br>#include&lt;string.h&gt;<br>#define MAX 210<br>int Map[MAX][MAX];<br>int n, M, SUM, Path[MAX], distance[MAX], Min;<br>int IN(){<br>&nbsp;&nbsp;&nbsp; int i, x, y, d;<br>&nbsp;&nbsp;&nbsp; if( scanf( "%d %d", &amp;M, &amp;n ) == EOF )return 0;&nbsp; //&nbsp;M 是 边的数目， n&nbsp;是点的数目<br>&nbsp;&nbsp;&nbsp; memset( Map, 0, sizeof( Map ) );<br>&nbsp;&nbsp;&nbsp; for( i = 1; i &lt;= M; i++ ){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scanf( "%d %d %d", &amp;x, &amp;y, &amp;d );&nbsp;&nbsp;&nbsp;//&nbsp;点x 到点y流量为 d <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Map[x][y] += d;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; return 1;<br>}<br>void Dijkstra(){<br>&nbsp;&nbsp;&nbsp; int mindis, i, j, u, s[MAX];<br>&nbsp;&nbsp;&nbsp; for( i = 1; i &lt;= n; i++ ){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; distance[i] = Map[1][i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s[i] = 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( i != 1 &amp;&amp; distance[i] &gt; 0 )Path[i] = 1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else Path[i] = -1;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; s[1] = 1;<br>&nbsp;&nbsp;&nbsp; for( i = 2; i &lt;= n; i++ ){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mindis = 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for( j = 1; j &lt;= n; j++ ){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( s[j] == 0 &amp;&amp; distance[j] &gt; mindis ){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; u = j;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mindis = distance[j];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( mindis == 0 )return;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s[u] = 1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for( j = 1; j &lt;= n; j++ ){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( s[j] == 0 &amp;&amp; Map[u][j] &gt; 0 &amp;&amp; distance[u] + Map[u][j] &gt; distance[j] ){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; distance[j] = distance[u] + Map[u][j];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Path[j] = u;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>}</p>
<p>void Find(){<br>&nbsp;&nbsp;&nbsp; int s, t;<br>&nbsp;&nbsp;&nbsp; Min = 2000000000;<br>&nbsp;&nbsp;&nbsp; s = n;<br>&nbsp;&nbsp;&nbsp; t = Path[n];<br>&nbsp;&nbsp;&nbsp; while( t != -1 ){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( Map[t][s] &lt; Min )Min = Map[t][s];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s = t;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t = Path[t];<br>&nbsp;&nbsp;&nbsp; }<br>}</p>
<p>void Change(){<br>&nbsp;&nbsp;&nbsp; int s, t;<br>&nbsp;&nbsp;&nbsp; s = n;<br>&nbsp;&nbsp;&nbsp; t = Path[n];<br>&nbsp;&nbsp;&nbsp; while( t != -1 ){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Map[t][s] -= Min;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Map[s][t] += Min;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s = t;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t = Path[t];<br>&nbsp;&nbsp;&nbsp; }<br>}</p>
<p>void SOLVE(){<br>&nbsp;&nbsp;&nbsp; int i, j, k;<br>&nbsp;&nbsp;&nbsp; SUM = 0;<br>&nbsp;&nbsp;&nbsp; while( 1 ){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dijkstra();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( Path[n] == -1 )return;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Find();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SUM += Min;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Change();<br>&nbsp;&nbsp;&nbsp; }<br>}</p>
<p>void OUT(){<br>&nbsp;&nbsp;&nbsp; printf( "%d\n", SUM );<br>}</p>
<p>int main(){<br>&nbsp;&nbsp;&nbsp; while( IN() ){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SOLVE();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OUT();<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; return 0;<br>}<br></p>
<img src ="http://www.cppblog.com/Barracuda/aggbug/20362.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Barracuda/" target="_blank">Barracuda</a> 2007-03-22 15:18 <a href="http://www.cppblog.com/Barracuda/archive/2007/03/22/20362.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>  做PKU做ACM 满200题纪念帖</title><link>http://www.cppblog.com/Barracuda/archive/2007/03/17/20025.html</link><dc:creator>Barracuda</dc:creator><author>Barracuda</author><pubDate>Sat, 17 Mar 2007 09:34:00 GMT</pubDate><guid>http://www.cppblog.com/Barracuda/archive/2007/03/17/20025.html</guid><wfw:comment>http://www.cppblog.com/Barracuda/comments/20025.html</wfw:comment><comments>http://www.cppblog.com/Barracuda/archive/2007/03/17/20025.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/Barracuda/comments/commentRss/20025.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Barracuda/services/trackbacks/20025.html</trackback:ping><description><![CDATA[
		<p>        做ACM 已经有快一年了，终于在PKU做满200题， 发帖纪念下，鼓励自己再接再厉。这一年发生的变化还真大啊，一不小心从一个新生变成了老生，从一个新手变成了老队员。想起来这一年来，感觉收获还是很大的。在这里我要特别感谢XC   Azg  Taney  Stone CB  ,他们给了我帮助与鼓励，也要感谢我的队友Lvyun Hailer，他们给了我很多的帮助。在做ACM 这个方面，我们学校一直很差，在06~07的全国三个赛区都掺败而归。现在我得努力，我的队友得努力，CUG 的ACMER 都得努力。让我们来把CUG 的ACM 做好， 努力吧，加油吧！</p>
<img src ="http://www.cppblog.com/Barracuda/aggbug/20025.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Barracuda/" target="_blank">Barracuda</a> 2007-03-17 17:34 <a href="http://www.cppblog.com/Barracuda/archive/2007/03/17/20025.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>