JD 8.24 笔试

考试安排:下来重新做了一遍
题目描述:
某校在积极推行无人监考制度,但是总有学生是不自觉的,
如果将两个很熟的异性朋友放在同一个考场里,他们就会
交流甚至作弊。因此一个考场中不能允许两个很熟的异性
朋友存在,学校希望通过搬出一部分学生的方法来改善这
一问题。
但是又因为教室数量有限,因此希望一个教室中容下的学
生尽可能多,即需要搬出教室的学生数量尽可能少,请你
输出搬出教室人数最少,且字典序最小的方案。
输入
输入第一行有两个整数n和m,分别表示有n个男生和n个
女生,有m个朋友关系。
(1<=n<=500,1<=m<=100000)
接下来m行,每行有两个整数,x和y,表示第x号男生
和第y号女生是朋友。男生的编号均为[1,n],女生的
编号为[n+1,2n]。
输出
输出第一行包含一个整数a,表示最少需要搬出教室的人数。
输出第二行有a个整数,即a个需要搬出教室的人的编号,
要求人数最少,且字典序最小。

import java.util.ArrayList;
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Scanner;
public class Solution2 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while(in.hasNext()){

            int n = in.nextInt();

            int m = in.nextInt();

            boolean[][] relationShips = new boolean[2*n+1][2*n+1];
            Cell[] cells = new Cell[2*n+1];
            PriorityQueue maxHeap = new PriorityQueue(new Comparator() {
                @Override
                public int compare(Cell o1, Cell o2) {
                    if(o1.count==o2.count){
                        return o1.no - o2.no;
                    }
                    return o2.count - o1.count;
                }
            });
            int count = 0;
            for (int i = 1; i <= m; i++) {

                int x = in.nextInt();

                int y = in.nextInt();

                relationShips[x][y] = true;
                relationShips[y][x] = true;

                count = count + 2;

                if(cells[x]==null){
                    cells[x] = new Cell(x);
                    cells[x].count = 1;
                }else{
                    cells[x].count++;
                }
                if(cells[y]==null){
                    cells[y] = new Cell(y);
                    cells[y].count = 1;
                }else{
                    cells[y].count++;
                }
            }

            for (int i = 1; i < cells.length; i++) {
                if(cells[i]!=null&&cells[i].count!=0)
                maxHeap.offer(cells[i]);
            }
            ArrayList ans = new ArrayList();
            while (count>0){
                Cell cell = maxHeap.poll();
                if(cell==null || cell.count==0) continue;

                count -= cell.count;

                int no = cell.no;
                for (int i = 1; i <= 2*n; i++) {
                    if(relationShips[no][i]){
                        relationShips[no][i]=false;
                        relationShips[i][no]=false;
                        cells[i].count--;
                        count--;
                    }
                }
                ans.add(no);

            }
            int num = ans.size();
            System.out.println(num);
            int[] out = new int[num];
            for (int i = 0; i < ans.size(); i++) {
                out[i] = ans.get(i);
            }
            for (int i = 0; i < out.length; i++) {
                if(i==0){
                    System.out.print(out[i]);
                }else {
                    System.out.print(" " + out[i]);
                }
            }
        }
    }
}
class Cell{
    int no;
    int count;
    Cell(int no){
        this.no = no;
        this.count = 0;
    }
}
#笔试题目##春招##校招#
全部评论
ac了吗?什么思路?
点赞 回复 分享
发布于 2019-08-25 10:00

相关推荐

HTTP头是HTTP协议中的一部分,用于在请求和响应中传递附加的信息。&nbsp;HTTP头由字段名和字段值组成,用冒号分隔,每个字段占据一行。以下是几个常见的HTTP头字段及其作用:https://www.nowcoder.com/issue/tutorial?zhuanlanId=Mg58Em&amp;uuid=b48bebe08e474db8b80b853b12bafd48User-Agent:指明发送请求的客户端应用程序的类型和版本。服务器可以根据这个头字段来判断用户的设备或浏览器类型,以提供适合的内容。例:User-Agent:&nbsp;Mozilla/5.0&nbsp;(Windows&nbsp;NT&nbsp;10.0;&nbsp;Win64;&nbsp;x64)&nbsp;AppleWebKit/537.36&nbsp;(KHTML,&nbsp;like&nbsp;Gecko)&nbsp;Chrome/58.0.3029.110&nbsp;Safari/537.3Content-Type:指定请求或响应中传输的数据的MIME类型。对于请求,它告诉服务器请求正文的内容类型;对于响应,它告诉浏览器响应正文的内容类型。例:Content-Type:&nbsp;application/jsonContent-Length:指定请求或响应正文的字节数。服务器可以使用此字段来确定正文的长度,从而正确解析请求或响应。例:Content-Length:&nbsp;348Accept:指定客户端能够处理的响应内容类型。浏览器在发送请求时使用此字段,以告诉服务器它可以接受哪些类型的响应。例:Accept:&nbsp;text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8Authorization:用于在请求中传递身份验证信息,通常用于保护需要授权访问的资源。例:Authorization:&nbsp;Basic&nbsp;QWxhZGRpbjpvcGVuIHNlc2FtZQ==Cookie:用于在请求中传递保存在客户端的会话信息。服务器可以使用此字段来识别和验证用户。例:Cookie:&nbsp;sessionId=ABC123这些是HTTP头字段中的一些常见例子。HTTP头字段的作用是在请求和响应之间传递额外的信息,以便客户端和服务器可以根据需要进行适当的处理。不同的HTTP头字段有不同的作用,可以用于传递身份验证信息、内容类型、缓存控制等。
前端求职圈
点赞 评论 收藏
分享
评论
3
32
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务