| ||||||||||
| 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 | |||||||||
有人能帮忙看看吗。。我快被WA崩溃了。。program keypath3;
const maxn=300;
type
Tmatrix=array [0..maxn,0..maxn] of longint;
arr=array [0..maxn] of longint;
var
matrix:Tmatrix;
i,j,k,n,w,v,root,net,net1:longint;
ancestor,d,c:arr;
cut:array [0..maxn] of boolean;
procedure init;
var i,j,k:longint;
begin
read(net1);
while net1<>0 do
begin
while not eoln do
begin
read(net);
matrix[net1,net]:=1;
matrix[net,net1]:=1;
end;
readln;
read(net1);
end;
fillchar(ancestor,sizeof(ancestor),0);
fillchar(cut,sizeof(cut),false);
fillchar(d,sizeof(d),0);
fillchar(c,sizeof(c),0);
end;
procedure DFS(k,father,deep:longint);
var i,tot:longint;
begin
c[k]:=1;
d[k]:=deep;
ancestor[k]:=deep;
tot:=0;
for i:=1to n do
begin
if (matrix[i,k]<>0)and(i<>father)and(c[i]=1) then
begin
if ancestor[k]>d[i] then
ancestor[k]:=d[i];
end;
if (matrix[i,k]<>0)and(c[i]=0) then
begin
DFS(i,k,deep+1);
inc(tot);
if ancestor[k]>ancestor[i] then
ancestor[k]:=ancestor[i];
if ((k=root)and(tot>1))or((k<>root)and(ancestor[i]>=d[k]))then
cut[k]:=true;
end;
end;
c[k]:=2;
end;
procedure outit;
var i,sum:longint;
begin
sum:=0;
for i:=1to n do
if cut[i] then inc(sum);
if sum<>0 then writeln(sum);
end;
begin
assign(input,'init\network1.in');
reset(input);
readln(n);
while n<>0 do
begin
net:=0;
net1:=0;
w:=0;
v:=0;
i:=0;
j:=0;
k:=0;
fillchar(matrix,sizeof(matrix),0);
init;
root:=1;
DFS(1,0,1);
outit;
readln(n);
end;
close(input);
end.
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator