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 |
谁能帮我看下我的程序哪处有问题?tarjan算法,交了n次,就是过不了program p1470; const maxn=1000; maxq=10000; var q:array[1..maxn,0..maxq] of longint; son:array[1..maxn,0..maxn] of longint; ans,h:array[1..maxn] of longint; flag:array[1..maxn] of boolean; root,n,m:longint; procedure init; var i,j,x,y:longint; ch:char; function ru:longint; begin ch:='.'; ru:=0; while not (ch in ['0'..'9']) do read(ch); repeat ru:=ru*10+ord(ch)-48; read(ch); until not (ch in ['0'..'9']); end; begin for i:=1 to n do h[i]:=0; for i:=1 to n do q[i,0]:=0; for i:=1 to n do ans[i]:=0; for i:=1 to n do flag[i]:=false; for i:=1 to n do begin x:=ru; son[x,0]:=ru; for j:=1 to son[x,0] do begin read(son[x,j]); inc(h[son[x,j]]); end; readln; end; for i:=1 to n do if h[i]=0 then root:=i; readln(m); repeat dec(m); x:=ru; y:=ru; if x=y then begin inc(ans[x]); continue; end; inc(q[x,0]); q[x,q[x,0]]:=y; inc(q[y,0]); q[y,q[y,0]]:=x; if eoln then readln; until (m=0) or eof; for i:=1 to n do h[i]:=i; end; function find(p:longint):longint; begin if h[p]=p then exit(p); find:=find(h[p]); h[p]:=find; end; procedure tarjan(t:longint); var i,j:longint; begin flag[t]:=true; h[t]:=t; for i:=1 to q[t,0] do if flag[q[t,i]] then inc(ans[find(q[t,i])]); for i:=1 to son[t,0] do begin tarjan(son[t,i]); h[son[t,i]]:=t; end; end; procedure print; var i:longint; begin for i:=1 to n do if ans[i]>0 then writeln(i,':',ans[i]); end; begin while not eof do begin readln(n); if n=0 then break; init; tarjan(root); print; end; end. Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator