poj 3275 pascal(珍珠加强版)

题目大意:

已知有n头牛,知道m个产奶量的关系,问至少还要多少次比较,才能从小到大排序。

题目·分析:

其实这题就是金典的珍珠,只不过是要求的复杂点,不用作太大变动。如果超时的话,可以用邻接表做。

标程:

const  
  maxv=10001;  
  maxe=2000;  
  
var  
 d,c:array[1..maxe,0..maxv] of longint;  
 f:array[0..maxe,0..maxe] of boolean;  
 i,j,k,x,y:longint;  
 n,m:longint;  
 ans:longint;  
  
begin  
 read(n,m);   
  for i:=1 to m do  
    begin  
     readln(x,y);  
     f[x,y]:=true
     inc(d[x,0]);//插入邻接表
     d[x,d[x,0]]:=y;  //d[x]表示比x小的牛的编号,d[x,0]表示有多少个
     inc(c[y,0]);  //同理
     c[y,c[y,0]]:=x;  //c[y]表示比x大的牛的编号,d[x,0]表示有多少个
    end
  for k:=1 to n do  
    for i:=1 to c[k,0] do  
      begin  
        x:=c[k,i];  
        for j:=1 to d[k,0] do  
          begin  
            y:=d[k,j];  
            if not f[x,y]  
              then  
                begin  
                  d[x,0]:=d[x,0]+1;  {增加新的关系}
                  d[x,d[x,0]]:=y;  
                  c[y,0]:=c[y,0]+1;  
                  c[y,c[y,0]]:=x;  
                  f[x,y]:=true
                  ans:=ans+1;  {如果没有关系,则ans+1,ans初始为m}
                end
          end
      end
  write(n*(n-1) div 2-ans-m); 
end

 

 

 

你可能感兴趣的:(poj 3275 pascal(珍珠加强版))