1 条题解

  • 0
    @ 2025-8-24 21:32:43

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar kkksc03
    洛谷吉祥物 DA✩ZE

    搬运于2025-08-24 21:32:43,当前版本为作者最后更新于2013-12-21 22:38:25,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    模型基础:判断有向图是否有环(回路)

    [算法分析]

    搜索 <=70 分

    拓扑 100分

    显然:出图结点 < 图上结点 && 余下结点入度 > 零 即可判断为有环(回路)

    时间复杂度:O(n^2)

    [标程]

    Program usqwedf_bxdqdlyy;
    var
     n,m,i,x,y,k,h,find,t,base:longint;
     g,in_to,p:array[0..1001] of longint;
     map:array[0..1001,0..1001] of longint;
    begin
      readln(n,m,base);
      for i:=1 to m do begin
        readln(x,y);
        in_to[y]:=in_to[y]+1; g[x]:=g[x]+1; map[x,g[x]]:=y;
      end;
      while True do begin
        h:=0;
        for i:=1 to n do begin 
         if in_to[i]=0 then begin
           in_to[i]:=-1;
          h:=h+1; p[h]:=i; 
          end;
        end;
        find:=find+h;
        if h=0 then break;
        if find=n then break;
        for i:=1 to h do
          for k:=1 to g[p[i]] do in_to[map[p[i],k]]:=in_to[map[p[i],k]]-1;
      end;
      if find=n then begin
        writeln('Yes');
        base:=2; t:=1;
        while k>0 do begin
          if k and 1=1 then t:=t*base mod 9997;
          base:=base*base mod 9997;
          k:=k>>1;
       end;
        writeln(t);
      end
      else begin 
        writeln('No');
        writeln(base*base);
      end;
    end.
    kkksc03注:亦可使用tarjan缩点。
    
    • 1

    信息

    ID
    957
    时间
    1000ms
    内存
    125MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者