Description
北冥有YMW,其名为鲲。鲲之大,不知其几千里也;化而为鸟,其名为YMW。YMW之背,不知其几千里也;怒而飞,其翼若垂天之云。是鸟也,海运则将徙于南冥,南冥者,天池也。
《齐谐》者,志怪者也。《谐》之言曰:“今有N个数也,水击三千里,出现次数过N div 2者,是以吾想求众数者也。”此众数可佑NOIP场上平安,故请求。
Input
第1行一个正整数n。
第2行n个正整数用空格隔开。
Output
一行一个正整数表示那个众数。
分析
放一个连接——摩尔投票法
代码
const
maxe=40000;
maxv=2000000;
type
rec=record
x,y,w,next:longint;
flag:boolean;
end;
var
n,m,nm:longint;
a:array[1..maxv] of rec;
f:array[1..maxv] of longint;
ls:array[1..maxv] of longint;
dfn:array[1..maxv] of longint;
tot,num:longint;
i,j,k:longint;
ans:longint;
zz,zz1,zz2,zz3:longint;
s:string;
procedure dfs(r:longint);
var
i,j,k:longint;
begin
tot:=tot+1;
dfn[r]:=tot;
i:=ls[r];
while i<>0 do
with a[i] do
begin
if not flag
then begin
flag:=true;
a[w].flag:=true;
if dfn[y]=0 then dfs(y);
end;
i:=next;
end;
end;
procedure add(x,y:longint);
begin
m:=m+1;
a[m].x:=x;
a[m].y:=y;
a[m].w:=m+1;
a[m].next:=ls[x];
ls[x]:=m;
m:=m+1;
a[m].x:=y;
a[m].y:=x;
a[m].w:=m-1;
a[m].next:=ls[y];
ls[y]:=m;
end;
begin
readln(n,nm);
m:=0; num:=0;
for i:=1 to nm do
begin
readln(j,k);
add(j,k);
end;
readln(zz2);
zz3:=0;
for i:=1 to zz2-1 do
begin
read(zz);
zz1:=0;
readln(s);
if s[length(s)]<>' ' then s:=s+' ';
delete(s,1,1);
k:=pos(' ',s);
while k<>0 do
begin
val(copy(s,1,k-1),j);
delete(s,1,k);
k:=pos(' ',s);
zz1:=zz1+1;
end;
if (i=1) then continue;
if zz1 xor zz=zz3
then writeln('Disconnected')
else begin
zz3:=zz3+1;
writeln('Connected');
end;
end;
read(zz);
zz1:=1;
readln(s);
if s[length(s)]<>' ' then s:=s+' ';
delete(s,1,1);
k:=pos(' ',s);
while k<>0 do
begin
val(copy(s,1,k-1),f[zz1]);
delete(s,1,k);
k:=pos(' ',s);
zz1:=zz1+1;
end;
zz1:=zz1-1;
if zz1 xor zz=zz3
then writeln('Disconnected')
else begin
zz3:=zz3+1;
writeln('Connected');
end;
for j:=1 to zz1 do
begin
k:=f[j] xor zz3;
a[k*2-1].flag:=true;
a[k*2].flag:=true;
end;
dfs(1);
ans:=0;
for i:=1 to n do
if dfn[i]<>0 then ans:=ans+1;
if ans=n then writeln('Connected')
else writeln('Disconnected');
close(input);
close(output);
end.