Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:下面的代码在POJ可以AC,可是在XOJ(链接在内)确实WA了。。。请牛人指教。In Reply To:下面的代码在POJ可以AC,可是在XOJ(链接在内)确实WA了。。。请牛人指教。 Posted by:yogafrank at 2008-10-15 23:57:07 咱俩刚好相反 我在POJ WA 在 厦门大学的OJ上面AC了。。。 Run ID User Problem Result Memory Time Language Code Length Judge Submit Time 46079 winterlegend 1089 Accepted 80 K 8 MS Fpc 4896 B Apple 2009-01-24 10:44:45 program ditch ; const maxn = 1000 ; maxm = 100000 ; type arctype = record d , w , next : longint ; end ; var vertex : array[1..maxn] of longint ; cur : array[1..maxn] of longint ; h : array[1..maxn] of longint ; e : array[1..maxn] of longint ; q : array[1..maxn] of longint ; arc : array[1..maxm] of arctype ; level : array[0..maxn shl 1,1..maxn] of longint ; len : array[0..maxn shl 1] of longint ; n , m , tot : longint ; procedure addvertex( v0 : longint ) ; begin inc( len[h[v0]] ) ; level[h[v0],len[h[v0]]] := v0 ; end ; procedure addarc( x , y , w : longint ) ; begin inc( tot ) ; arc[tot].d := y ; arc[tot].w := w ; arc[tot].next := vertex[x] ; vertex[x] := tot ; end ; procedure bfs ; var head , tail , p : longint ; begin fillchar( h , sizeof( h ) , $7f ) ; q[1] := n ; h[n] := 0 ; head := 0 ; tail := 1 ; repeat inc( head ) ; p := vertex[q[head]] ; while ( p <> -1 ) do begin if ( h[arc[p].d] = 2139062143 ) then begin h[arc[p].d] := h[q[head]]+1 ; inc( tail ) ; q[tail] := arc[p].d ; if ( arc[p].d <> 1 ) then addvertex( arc[p].d ) ; end ; p := arc[p].next ; end ; until head = tail ; h[1] := n ; for p := 1 to n do if h[p] = 2139062143 then begin h[p] := 0 ; addvertex( p ) ; end ; end ; procedure enter ; var x , y , w , i : longint ; begin fillchar( vertex , sizeof( vertex ) , $ff ) ; tot := 0 ; readln( m , n ) ; for i := 1 to m do begin readln( x , y , w ) ; addarc( x , y , w ) ; addarc( y , x , 0 ) ; end ; end ; procedure push( u , p : longint ) ; var x : longint ; begin if ( e[u] < arc[p].w ) then x := e[u] else x := arc[p].w ; inc( e[arc[p].d] , x ) ; dec( e[u] , x ) ; dec( arc[p].w , x ) ; if ( p and 1 = 1 ) then inc( arc[p+1].w , x ) else inc( arc[p-1].w , x ) ; end ; procedure relabel( u : longint ) ; var p , x : longint ; begin x := maxlongint ; p := vertex[u] ; while ( p <> -1 ) do begin if ( arc[p].w > 0 ) and ( h[arc[p].d] < x ) then x := h[arc[p].d] ; p := arc[p].next ; end ; h[u] := 1+x ; end ; function discharge( u : longint ) : boolean ; begin discharge := false ; while ( e[u] > 0 ) do if ( cur[u] = -1 ) then begin relabel( u ) ; discharge := true ; cur[u] := vertex[u] ; end else if ( arc[cur[u]].w > 0 ) and ( h[u] = h[arc[cur[u]].d]+1 ) then push( u , cur[u] ) else cur[u] := arc[cur[u]].next ; end ; procedure blow( height : longint ) ; var i , j : longint ; begin for i := height+1 to n do begin for j := 1 to len[i] do begin h[level[i,j]] := n+1 ; addvertex( level[i,j] ) ; end ; len[i] := 0 ; end ; end ; procedure initialize ; var p : longint ; begin fillchar( e , sizeof( e ) , 0 ) ; fillchar( h , sizeof( h ) , 0 ) ; bfs ; for p := 1 to n do cur[p] := vertex[p] ; p := vertex[1] ; while ( p <> -1 ) do begin if ( arc[p].w > 0 ) then begin inc( e[arc[p].d] , arc[p].w ) ; dec( e[1] , arc[p].w ) ; if ( p and 1 = 1 ) then inc( arc[p+1].w , arc[p].w ) else inc( arc[p-1].w , arc[p].w ) ; arc[p].w := 0 ; end ; p := arc[p].next ; end ; end ; procedure solve ; var now , k , i : longint ; begin initialize ; now := n ; while ( now > 0 ) do begin dec( now ) ; for i := len[now] downto 1 do if ( discharge( level[now,i] ) ) then begin if ( len[now] = 1 ) then blow( now ) ; k := h[level[now,i]] ; addvertex( level[now,i] ) ; level[now,i] := level[now,len[now]] ; dec( len[now] ) ; now := k ; break ; end ; end ; writeln(e[n]) ; end ; begin while not seekeof do begin enter ; solve ; end ; end . Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator