京东java编程题这么简单
发布于 2018-09-09 20:43 6497 次浏览 0 赞 来自 试题交流  

选择题崩溃

38 条回复

求第一题解

2018-09-09 20:44
2
coder_8R6DFFJK 回复 coder_YRQWXQD6

我是把没有连接的顶点分为一个集合,这个集合里面的所有顶点连接的其他顶点应该都是一样的

2018-09-09 20:48

第一题没AC,第二题简单的不敢相信

2018-09-09 20:55

第二题18.。。。。第一题AC了。。。。很无语

2018-09-09 20:57
2
coder_VRC3VTR9 回复 coder_8R6DFFJK

层主能不能把代码写出来,我等渣渣参考下

2018-09-09 20:58
coder_9JSRNWC9 回复 coder_YRQWXQD6

其实不难,就是先划分,按照相连点最多的先划分,依此类推,设定一些判定条件,最后在对划分的集合进行判断是否均相连即可

2018-09-09 20:59
coder_B7EbqZJh 回复 coder_9JSRNWC9

我也是。。。

2018-09-09 21:00
coder_Ef28xQcn 回复 coder_9JSRNWC9

我第一题18.。。。。第二题AC。。。。

2018-09-09 21:01

编程第一题 集合 里面可以只有一个节点?

2018-09-09 21:01

唉 没来的及看第2题

2018-09-09 21:03

都这么强大吗 - - 小菜鸡瑟瑟发抖

2018-09-09 21:04

求第一题代码

2018-09-09 21:05
coder_Dry1ZYwh 回复 coder_wN9VRyFk

好多节点啊

2018-09-09 21:06
coder_9JSRNWC9 回复 coder_B7EbqZJh

你也很帅气,我先做的第二题,花了5分钟,然后花了1个多小时搞第一题。。。

2018-09-09 21:06

选择做的好懵逼,编程还好,没有变态的测试数据,我写的很简单就都AC了

2018-09-09 21:07

求第一题代码

2018-09-09 21:07

l老实说,第一题没看懂

2018-09-09 21:09

第一题最后AC了36% ,笑cry

2018-09-09 21:09

第二题18%的答案,如果是直接暴力的话,原因应该是没break出第二个循环吧

2018-09-09 21:09
1

除非点划分的集合重要只有一个点

2018-09-09 21:09
coder_wN9VRyFk 回复 coder_Dry1ZYwh

请问第一个样例 怎么解释: 1 3 1 5 2 3 2 5 3 4 4 5 3 5 节点5不是和其他四个节点都有连线吗,节点5可以自成一个集合?

2018-09-09 21:10

同求第一题代码

2018-09-09 21:12
coder_S3GY2678 回复 coder_bKvIzDge

我暴力的,break之后也是18

2018-09-09 21:13
coder_S3GY2678 回复 coder_bKvIzDge

我怀疑是暴力超时间了

2018-09-09 21:13
coder_S3GY2678 回复 coder_Dry1ZYwh

帅哥,可以贴一下两道题的代码吗

2018-09-09 21:14
coder_Dry1ZYwh 回复 coder_wN9VRyFk

感觉样例有点问题,意思理解就好了

2018-09-09 21:19
coder_Dry1ZYwh 回复 coder_wN9VRyFk

个人感觉最后一组应该是3 4 就对了

2018-09-09 21:19
coder_Dry1ZYwh 回复 coder_S3GY2678

我看后面有人贴了,我的渣渣代码就不拿出来丢脸啦 哈哈

2018-09-09 21:20

第二题好做,第一题我完整理解题意就没什么时间了。前面选择题细节扣的太厉害

2018-09-09 21:21

第一题代码

public class Main {

public static String isCover(int[][] edge,int N){

String s = "Yes";

int [] sum = new int[N+1];

for(int i=1;i<N+1;i++){

for(int j=1;j<N+1;j++){

sum[i]+=edge[i][j];

}

}

for(int i=1;i<N+1;i++){

for(int j=1;j<N+1;j++){

if(edge[i][j]==0){

if(sum[j]!=sum[i]) s="No";

}

}

}

return s;

}


public static void main(String[] args) {

// TODO Auto-generated method stub

Scanner scan = new Scanner(System.in);

int T = scan.nextInt();

while(T>0){

int N = scan.nextInt();

int M = scan.nextInt();

int X,Y;

int[][] edge = new int[N+1][N+1];

for(int i=0;i<M;i++){

X =scan.nextInt();

Y = scan.nextInt();

edge[X][Y] = 1;

edge[Y][X] = 1;

}

String s = isCover(edge, N);

System.out.println(s);

T--;

}

}


}


2018-09-09 21:21
2
coder_9PAJG6AA 回复 coder_9JSRNWC9

何曾相似

2018-09-09 21:21
coder_Dry1ZYwh 回复 coder_S3GY2678

我也是暴力做的,可能是提交的早,没有问题的AC

2018-09-09 21:22
coder_XA8MFXQP 回复 coder_9JSRNWC9

第一题就是求S的所有长度为len(T)的子集,然后将子集与T进行比较。然后我子集就是不会求。。。

2018-09-09 21:23
coder_9TPDD6GX 回复 coder_Dx2pwhRo

看完你的思路,感觉自己是个智障

2018-09-09 21:34
coder_KNZ5F3FD 回复 coder_Dx2pwhRo

牛逼!!!

2018-09-09 21:59

/*

直接 ac 100%, 不需要 bsf, dfs ,直接两个for循环就可以

*/


import java.util.*;


public class Main {


    public static class Node{

        public int value;

        public ArrayList<Node> nexts;

        public boolean pass;


        public Node(int value){

            this.value = value;

            nexts = new ArrayList<>();

            pass = false;

        }

    }


    public static void process(Scanner in){

        int n = in.nextInt();

        int m = in.nextInt();


        HashMap<Integer, Node> map = new HashMap<>();

        for(int i = 0; i < n; i++){

            map.put(i+1, new Node(i+1));

        }


        for(int i = 0; i < m; i++){

            int f = in.nextInt();

            int s = in.nextInt();

            Node nf = map.get(f);

            Node ns = map.get(s);

            nf.nexts.add(ns);

            ns.nexts.add(nf);

        }


        Node n1 = map.get(1);

        map.remove(1);

        List<Node> xl = n1.nexts;

        List<Node> nxl = new ArrayList<>();


        for (Map.Entry<Integer, Node> entry : map.entrySet()) {

            if(!xl.contains(entry.getValue())){

                nxl.add(entry.getValue());

            }

        }


        boolean pan = false;

        for(Node node : nxl){

            for(Node node1: xl){

                if(!node.nexts.contains(node1)){

                    pan = true;

                    break;

                }

            }

        }

        if(pan){

            System.out.println("No");

        }else{

            System.out.println("Yes");

        }

    }


    public static void main(String[] args){


        Scanner in = new Scanner(System.in);


        int n = in.nextInt();

        for(int i = 0; i < n; i++){

            process(in);

        }

    }

}


2018-09-09 22:01
coder_BWVJ54SK 回复 coder_Dx2pwhRo

要求是完全图,你这个方法对于某个划分出的子集合,如果该集合中的每个点都删除一个对外连接,似乎仍然会返回Yes?

2018-09-09 22:04
coder_S6Jg8eQ7 回复 coder_Dx2pwhRo

你的思路是:“任意两个没有连接的点上的连线数都相等(记做命题A)”,就可以判断出“是完全多部图(记做命题B)”。 如果我上面理解的没错的话,我想说,B可以推出A,但A推不出B。 下面举一个例外: 有6个点,编号 1 2 3 4 5 6 1 2 3 彼此相连,4 5 6 彼此相连 这样每一个点上的连线数都是2,但它不是完全多部图。

我想的可能也有问题,请大家指正。

2018-09-10 19:47
添加回复
回到顶部