朋友

来源:互联网 发布:苹果手机网络加速软件 编辑:程序博客网 时间:2024/05/01 13:48

题目描述

经过六年的努力,小明终于被一所知名中学录取。优秀的小明总是对一些奇奇怪怪的事情感兴趣,这次他想知道谁在这所新学校拥有的朋友最多,由于大家都才刚报到,所以小明只知道大家两两之间是否是朋友关系。

输入

输入文件friend.in的第一行有两个整数n和m,n表示总人数,m表示总关系数。
接下来n行,每行有2个以空格隔开的整数a和b,表示a和b是朋友,a和b均为1到n之间的整数。不会给出重复的朋友关系。

输出

输出文件friend.out中仅有一行,表示朋友数最多的人所拥有的朋友,每两个整数之间用空格隔开,按照字典序从小到大输出。如果存在多个人朋友数都是最多的情况,请输出字典序最小的那人的答案,具体见样例。

样例输入

3 3
1 2
2 3
1 3

样例输出

2 3

数据范围限制

50%的数据,1 <= n <= 10
80%的数据,1 <= n <= 1000
100%的数据,1 <= n <= 10000,m <= 500000

提示

1、2、3均拥有2个朋友,因此输出字典序较小的1的朋友即可。
1的朋友为2和3,按照字典序从小到大输出,数字之间用空格隔开。

TJ

直接暴力……

BC

var        n,m,i,x,y:longint;        p:array[1..10000,1..10000]of boolean;        nl:array[1..10000,1..2]of int64;procedure kp(l,r:longint);var        i,j,mid,mid1:longint;        t:array[1..2]of int64;begin        i:=l;        j:=r;        mid:=nl[(l+r)div 2,2];        mid1:=nl[(l+r)div 2,1];        repeat                while (nl[i,2]>mid)or(nl[i,2]=mid)and(nl[i,1]<mid1) do inc(i);                while (nl[j,2]<mid)or(nl[j,2]=mid)and(nl[j,1]>mid1) do dec(j);                if i<=j then                begin                        t:=nl[i];                        nl[i]:=nl[j];                        nl[j]:=t;                        inc(i);                        dec(j);                end;        until i>j;        if l<j then kp(l,j);        if i<r then kp(i,r);end;begin        assign(input,'friend.in');reset(input);        assign(output,'friend.out');rewrite(output);        readln(n,m);        for i:=1 to m do        begin                readln(x,y);                p[x,y]:=true;                p[y,x]:=true;                inc(nl[x,2]);                inc(nl[y,2]);        end;        for i:=1 to n do nl[i,1]:=i;        kp(1,n);        for i:=1 to n do if p[nl[1,1],i] then write(i,' ');        writeln;        close(input);close(output);end.