CCF-CSP 通信网络 JAVA 201709-4 100分
来源:互联网 发布:人工智能生活应用实例 编辑:程序博客网 时间:2024/06/13 01:28
思路:
我不知道标准解法是怎么样的,反正我为我“禁忌的解法”解得100分感到很开心=。=
首先使用list,制作好图的邻接表。
一个是
1→2→3
2→4
3→4
4
一个是
1
2→1
3→1
4→2→3
为什么要分两个邻接表呢,因为一个邻接表不能正确的表示我们要的结果。(自己体悟吧。。。 表1确定发送信号方有哪些全知,表2确定接受信号方有哪些全知)
接下来我们做一个n*n(为去掉0实际n+1 * n+1)的二维数组 vis
vis[i][j] 表示 点i和点j是否可以连通
最终只要j从1到n都为true(都连通) 则部门i全知,ans++
那么下面实际操作:只需要用bfs或者dfs做一下这个vis表就可以了
package csp2017_09_4;import java.util.ArrayList;import java.util.LinkedList;import java.util.List;import java.util.Queue;import java.util.Scanner;public class Main{static List<Integer> list[];static List<Integer> list2[];static boolean vis [][] ;static boolean vn[];static int n,m;public static void main(String[] args){Scanner sc = new Scanner(System.in);n = sc.nextInt();m = sc.nextInt();list = new ArrayList[n+1];list2 = new ArrayList[n+1];for (int i = 0; i < list.length; i++) {list[i] = new ArrayList<Integer>();list2[i] = new ArrayList<Integer>();}for (int i = 0; i < m; i++) {int s = sc.nextInt();int e = sc.nextInt();list[s].add(e);list2[e].add(s);}vis = new boolean[n+1][n+1];for (int i = 0; i < vis.length; i++) {vis[i][i] = true;}//bfsQueue<Integer> q = new LinkedList();for (int t = 1; t <= n; t++) {q.add(t);vn = new boolean[n+1];while(!q.isEmpty()){int temp = q.poll();if(!vn[temp]){for (int i = 0; i < list[temp].size(); i++) {int next = list[temp].get(i);q.add(next);}vn[temp] = true;vis[t][temp] = true;}}}for (int t = 1; t <= n; t++) {q.add(t);vn = new boolean[n+1];while(!q.isEmpty()){int temp = q.poll();if(!vn[temp]){for (int i = 0; i < list2[temp].size(); i++) {int next = list2[temp].get(i);q.add(next);}vn[temp] = true;vis[t][temp] = true;}}}//for (int i = 1; i < vis.length; i++) {//for (int j = 1; j < vis[i].length; j++) {//if(vis[i][j])System.out.print(1+" ");//else System.out.print(0+" ");//}//System.out.println();//}int ans = 0;for (int i = 1; i < vis.length; i++) {boolean knowAll = true;for (int j = 1; j < vis[i].length; j++) {if(!vis[i][j]){knowAll = false;break; }}if(knowAll) ans++;}System.out.println(ans);}}
试题编号:201709-4试题名称:通信网络时间限制:1.0s内存限制:256.0MB问题描述:
问题描述
某国的军队由N个部门组成,为了提高安全性,部门之间建立了M条通路,每条通路只能单向传递信息,即一条从部门a到部门b的通路只能由a向b传递信息。信息可以通过中转的方式进行传递,即如果a能将信息传递到b,b又能将信息传递到c,则a能将信息传递到c。一条信息可能通过多次中转最终到达目的地。
由于保密工作做得很好,并不是所有部门之间都互相知道彼此的存在。只有当两个部门之间可以直接或间接传递信息时,他们才彼此知道对方的存在。部门之间不会把自己知道哪些部门告诉其他部门。
上图中给了一个4个部门的例子,图中的单向边表示通路。部门1可以将消息发送给所有部门,部门4可以接收所有部门的消息,所以部门1和部门4知道所有其他部门的存在。部门2和部门3之间没有任何方式可以发送消息,所以部门2和部门3互相不知道彼此的存在。
现在请问,有多少个部门知道所有N个部门的存在。或者说,有多少个部门所知道的部门数量(包括自己)正好是N。
由于保密工作做得很好,并不是所有部门之间都互相知道彼此的存在。只有当两个部门之间可以直接或间接传递信息时,他们才彼此知道对方的存在。部门之间不会把自己知道哪些部门告诉其他部门。
上图中给了一个4个部门的例子,图中的单向边表示通路。部门1可以将消息发送给所有部门,部门4可以接收所有部门的消息,所以部门1和部门4知道所有其他部门的存在。部门2和部门3之间没有任何方式可以发送消息,所以部门2和部门3互相不知道彼此的存在。
现在请问,有多少个部门知道所有N个部门的存在。或者说,有多少个部门所知道的部门数量(包括自己)正好是N。
输入格式
输入的第一行包含两个整数N, M,分别表示部门的数量和单向通路的数量。所有部门从1到N标号。
接下来M行,每行两个整数a, b,表示部门a到部门b有一条单向通路。
接下来M行,每行两个整数a, b,表示部门a到部门b有一条单向通路。
输出格式
输出一行,包含一个整数,表示答案。
样例输入
4 4
1 2
1 3
2 4
3 4
1 2
1 3
2 4
3 4
样例输出
2
样例说明
部门1和部门4知道所有其他部门的存在。
评测用例规模与约定
对于30%的评测用例,1 ≤ N ≤ 10,1 ≤ M ≤ 20;
对于60%的评测用例,1 ≤ N ≤ 100,1 ≤ M ≤ 1000;
对于100%的评测用例,1 ≤ N ≤ 1000,1 ≤ M ≤ 10000。
对于60%的评测用例,1 ≤ N ≤ 100,1 ≤ M ≤ 1000;
对于100%的评测用例,1 ≤ N ≤ 1000,1 ≤ M ≤ 10000。
阅读全文
1 0
- CCF-CSP 通信网络 JAVA 201709-4 100分
- CCF CSP 网络延时 JAVA 201503_4 100分
- CCF CSP 公共钥匙盒 JAVA 201709-2 100分
- CCF-CSP 游戏 JAVA 201604-4 100分
- CCF CSP 高速公路 JAVA 201509-4 100分
- CCF CSP 201703-1 分蛋糕(Java-100分)
- CCF CSP 201703-2 学生排队(Java-100分)
- CCF CSP 201612-1 中间数(Java-100分)
- CCF CSP 201612-2 工资计算(Java-100分)
- CCF CSP 201612-3 权限查询(Java-100分)
- CCF CSP 201609-1 最大波动(Java-100分)
- CCF CSP 201609-2 火车购票(Java-100分)
- CCF CSP 201604-2 俄罗斯方块(Java-100分)
- CCF CSP 201512-1 数位之和(Java-100分)
- CCF CSP 201509-1 数列分段(Java-100分)
- CCF CSP 201509-2 日期计算(Java-100分)
- CCF-CSP 交通规划 JAVA 2016-09-04 100分
- CCF CSP 路径解析 JAVA 201604-3 100分
- 字符编码方式
- EditText下划线颜色修改
- 09下软考错题集锦
- Spring源码学习(1) — 总体概述
- C#_获取汉字拼音
- CCF-CSP 通信网络 JAVA 201709-4 100分
- 实时监控MySQL信息的脚本
- 深度详解根轨迹的8大规则
- 重要且紧急的事,紧急但不重要的事,重要但不紧急的事,既不紧急又不重要的事
- nova create
- 编程中踩的坑——持续更新
- HTTPS(Hypertext Transfer Protocol Secure)安全超文本传输协议
- 深度学习--手写数字识别<三>
- keil 5 错误集合