P4186求助
  • 板块学术版
  • 楼主南橙未熟k
  • 当前回复0
  • 已保存回复0
  • 发布时间2020/10/20 16:29
  • 上次更新2023/11/5 10:19:23
查看原帖
P4186求助
35232
南橙未熟k楼主2020/10/20 16:29

有没有大佬看一看我的程序哪里错了,只对了两个点 本人pascal蒟蒻

const maxn=100002;
var
        n,k,tot,ans,i,x,y:longint;
        too,ne:array[1..maxn] of longint;
        head,de,smin:array[1..maxn] of longint;

function min(x,y:longint):longint;
begin
        if x<y then exit(x);
        exit(y);
end;

procedure add(x,y:longint);
begin
        inc(tot);
        too[tot]:=y;
        ne[tot]:=head[x];
        head[x]:=tot;
end;

procedure dfs(x,fa:longint);
var i,y,minn:longint;
begin
        de[x]:=de[fa]+1;
        minn:=de[x];
        i:=head[x];
        while i<>0 do
        begin
                y:=too[i];
                if y=fa then
                begin
                        i:=ne[i];
                        continue;
                end;
                dfs(y,x);
                if minn=de[x] then minn:=smin[y]
                        else minn:=min(minn,smin[y]);
                i:=ne[i];
        end;
        smin[x]:=minn;
end;

procedure dfs2(x,fa:longint);
var i,y:longint;
begin
        if smin[x]<=de[x]*2 then
        begin
                inc(ans);
                exit;
        end;
        i:=head[x];
        while i<>0 do
        begin
                y:=too[i];
                if y=fa then
                begin
                        i:=ne[i];
                        continue;
                end;
                dfs2(y,x);
                i:=ne[i];
        end;
end;

begin
        readln(n,k);
        for i:=1 to n-1 do
        begin
                readln(x,y);
                add(x,y);
                add(y,x);
        end;
        de[k]:=-1;
        dfs(k,k);
        dfs2(k,k);
        writeln(ans);
end.


2020/10/20 16:29
加载中...