记录编号 69556 评测结果 AAAAAAAAAA
题目名称 [NOI 2008]假面舞会 最终得分 100
用户昵称 GravatarGDFRWMY 是否通过 通过
代码语言 Pascal 运行时间 0.132 s
提交时间 2013-09-18 13:00:38 内存使用 23.91 MiB
显示代码纯文本
  var
    a,d : array[1..100000]of longint;
    v : array[1..100000]of boolean;
    ef,et,ec : array[1..2000000]of longint;
    x,y,i,n,m,ans,tot,m1,m2,m3 : longint;
    procedure link(x,y,z: longint);
    begin
    inc(tot);
    ec[tot]:=z;
    et[tot]:=y;
    ef[tot]:=a[x];
    a[x]:=tot;
    end;

    function gcd(x,y:longint):longint;
    begin
    if y=0 then exit(x);if x=0 then exit(y);
    exit(gcd(y,x mod y));
    end;

    procedure dfs(x:longint);
    var i : longint;
    begin
    i:=a[x];
    v[x]:=true;
    if d[x]<m1 then m1:=d[x];
    if d[x]>m2 then m2:=d[x];

    while i<>0 do
    begin
    if not v[et[i]]then
    begin
    d[et[i]]:=d[x]+ec[i];dfs(et[i]);end
    else
    ans:=gcd(abs(d[et[i]]-(d[x]+ec[i])),ans);
    i:=ef[i];
    end;
    end;

    begin
    assign(input,'party2008.in');reset(input);
    assign(output,'party2008.out');rewrite(output);
    readln(n,m);
    for i:=1 to m do
    begin
    readln(x,y);
    link(x,y,1);link(y,x,-1);
    end;
    ans:=0;
    m3:=0;
    m1:=maxlongint;
    m2:=-maxlongint;
    for i:=1 to n do
    if not v[i]then
    begin
    dfs(i);
    m3:=m3+m2-m1+1;
    m1:=maxlongint;
    m2:=-maxlongint;end;
    if ans<>0 then
    begin
    if ans<3 then begin
    writeln('-1 -1');
    halt;end;
    for i:=3 to ans do
    if ans mod i=0 then break;
    writeln(ans,' ',i);
    end else
    if m3<3 then begin writeln('-1 -1');halt;
    end
    else writeln(m3,' ',3);
    close(input);
    close(output);
    end.