POJ-1236 Network of Schools 缩点

题意:就是给我们一个网络 让我们求

1 选择最少的点传信 能够使得这个信息传遍整个网络

2 求加的最少的边 使得 加上这些边后整个图任取一个点信息就可以传到网络中任何一个店


分析: 对于1问 可以用tarjan缩点 把所有的强联通分量缩成一个点 去考虑 然后求一下出度为0的点 就是让信息传遍整个网络的点的数量 如果这里选择根据出度的数量排序用BFS把尽可能多的点标记的做法 会WA 因为用BFS去考虑的话 只考虑了出度没有考虑入度 有些点考虑不到 就是那些入度为0出度比较小的点 网络中只有搞定了这些点才能让一个信息传遍整个网络 因为入度为0的点 无论怎么考虑出度 都不会有边能够沟通到这类点 

对于2问 还是统计出入度和出度为0的点 我们考虑 对于一个网络 只要把他改造成一个强联通图 这个图中的任意亮点就都可达了

也就是解决入度为0和出度为0的点 因为入度为0的点 没人穿的到他 出度为0的点信息给他出不去 所以当我们让这两类点一对一互相联通 剩下的多余的任意连 即可沟通整个网络

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.PrintWriter;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Scanner;class node implements Comparable<node>{int id,edge;node(){}node(int a,int b){this.id = a;this.edge = b;}@Overridepublic int compareTo(node p) {// TODO Auto-generated method stubif(p.edge<=this.edge)return 1;else return -1;}}public class Main {static final int maxn = 110;static PrintWriter out = new PrintWriter(new BufferedOutputStream(System.out));static ArrayDeque<Integer> que = new ArrayDeque<Integer>();static ArrayDeque<Integer> S = new ArrayDeque<Integer>();static int head[] = new int[maxn*maxn];static int to[] = new int[maxn*maxn];static int next[] = new int[maxn*maxn];static boolean bok[] = new boolean[maxn];static boolean isS[] = new boolean[maxn];static int tag=0,cnt=0,ans1 =0 ,ans2=0,ind;static int dfn[] = new int[maxn];static int low[] = new int[maxn];static node nod[] = new node[maxn];static int[] id = new int[maxn];static int cir;static int in[] = new int [maxn];static int out1[] = new int[maxn];static void dfs(int x) {dfn[x] = low[x] = ++ind;S.push(x);isS[x] = true;for(int i=head[x];i!=-1;i = next[i]) {int t=to[i];if(dfn[t]==0) {dfs(t);low[x] = Math.min(low[t], low[x]);}else if(isS[t])low[x] = Math.min(low[x],dfn[t]);}if(dfn[x]==low[x]){ans2++;++cir;while(true){int t;if(!S.isEmpty()) {t = S.peek();S.pop();isS[t] = false;id[t] = cir;					if(t==x)break;}}}}	static void addEdge(int x,int t) {	to[tag] = t;next[tag] = head[x];head[x] = tag++;}public static void main(String[] args) {Scanner sc = new Scanner(new BufferedInputStream(System.in));while(sc.hasNext()) {int n = sc.nextInt();Arrays.fill(head,-1);Arrays.fill(bok, false);Arrays.fill(isS, false);Arrays.fill(dfn, 0);Arrays.fill(low, 0);Arrays.fill(in,0);Arrays.fill(out1, 0);cir = tag=cnt=ans1=ans2=ind=0;for(int i=1;i<=n;i++) {if(nod[i]==null)nod[i] = new node(i,0);else {nod[i].id = i;nod[i].edge=0;}while(true) {int t = sc.nextInt();if(t==0)break;addEdge(i,t);		}			}for(int i=1;i<=n;i++) {if(dfn[i]==0) {S.clear();dfs(i);}}for(int i=1;i<=n;i++) {for(int j = head[i];j!=-1;j=next[j]){int t = to[j];if(id[t]!=id[i]){in[id[t]]++;out1[id[i]]++;}}}int Iy = 0;for(int i=1;i<=cir;i++)if(in[i]==0) {ans1++;}else if(out1[i]==0) {Iy++;}out.println(ans1);if(cir==1)out.println(0);else out.println(Math.max(ans1, Iy));out.flush();			}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/425176.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

selenium+python自动化80-文件下载(不弹询问框)

前言 上一篇是点弹出框上的按钮去保存文件&#xff0c;本篇介绍一种更加优雅的方法&#xff0c;加载Firefox和Chrome的配置文件&#xff0c;不弹出询问框后台下载。 一、FirefoxProfile 1.点下载的时候&#xff0c;如下图&#xff0c;如果不想让它弹出这个询问框&#xff0c;可…

第二十期:想吃透监控系统,就这一篇够不够?

经济高速发展的今天&#xff0c;我们处于信息大爆炸的时代。随着经济发展&#xff0c;信息借助互联网的力量在全球自由地流动&#xff0c;于是就催生了各种各样的服务平台和软件系统。 经济高速发展的今天&#xff0c;我们处于信息大爆炸的时代。随着经济发展&#xff0c;信息借…

[Leetcode][第95题][JAVA][不同的二叉搜索树 II][递归]

【问题描述】[中等] 【解答思路】 1. 递归 复杂度 class Solution {public List<TreeNode> generateTrees(int n) {if (n 0) {return new LinkedList<TreeNode>();}return generateTrees(1, n);}public List<TreeNode> generateTrees(int start, int end…

EXEJ4 生成的java exe文件更换电脑后出现闪退情况解决办法

用命令行打开exe程序后检查调试信息发现如果是The JAVA_HOME environment variable does notpoint to a working 32-bit JDK or JRE.表示本电脑上没有对应的32位jdk或者jre运行环境&#xff0c;jdk版本不对解决办法&#xff1a;如果没有java运行环境需要提前配置好&#xff0c;…

2018-2019-2 网络对抗技术 20165303 Exp4 恶意代码分析

实践目标 1.1是监控你自己系统的运行状态&#xff0c;看有没有可疑的程序在运行。 1.2是分析一个恶意软件&#xff0c;就分析Exp2或Exp3中生成后门软件&#xff1b;分析工具尽量使用原生指令或sysinternals,systracer套件。 1.3假定将来工作中你觉得自己的主机有问题&#xff0…

第二十一期:老大难的GC原理及调优,这全说清楚了

本文介绍 GC 基础原理和理论&#xff0c;GC 调优方法思路和方法&#xff0c;基于 Hotspot jdk1.8&#xff0c;学习之后你将了解如何对生产系统出现的 GC 问题进行排查解决。 本文介绍 GC 基础原理和理论&#xff0c;GC 调优方法思路和方法&#xff0c;基于 Hotspot jdk1.8&…

[剑指offer]面试题第[47]题[JAVA][礼物的最大价值][动态规划]

【问题描述】[中等] 【解答思路】 1动态规划 动态规划流程 第 1 步&#xff1a;设计状态 f(i, j)f(i,j) 为从棋盘左上角走至单元格 (i ,j)(i,j) 的礼物最大累计价值 第 2 步&#xff1a;状态转移方程 f(i,j)max[f(i,j−1),f(i−1,j)]grid(i,j) 第 3 步&#xff1a;考虑初始化…

关于递归函数,非递归函数中引用传参的问题

首先 我们来看这个函数 typedef int Ele; typedef struct list{Ele data;list *next; }List,*LNode; void dele2(LNode &l,Ele e){if(lNULL)return;printf("Hello!!\n");printf("to %d\n",l);if(l->datae){LNode p l;l l->next;//***free(p…

请让蝴蝶爬满全身

请。转载于:https://www.cnblogs.com/SINXIII/p/10657726.html

第二十四期:揭秘:为什么电脑越用越卡 大型破案现场

今天谈一个大家都好奇地问题&#xff0c;为什么电脑越来越卡&#xff0c;相信大家都深有体会&#xff0c;好好的电脑刚买的时候像火箭&#xff0c;现在怎么就支棱不起来了呢&#xff0c;是老了么? 今天谈一个大家都好奇地问题&#xff0c;为什么电脑越来越卡&#xff0c;相信大…

[Leetcode]第[43]题[JAVA][字符串相乘][字符串相加]

【问题描述】[中等] 【解答思路】 1. 普通竖式 **复杂度&#xff1a;O(N^2) ** class Solution {/*** 计算形式* num1* x num2* ------* result*/public String multiply(String num1, String num2) {if (num1.equals("0") || num2.equals("0")) …

JSP中使用iframe导致内层网页CSS失效问题的解决方案

jsp中使用<iframe>&#xff0c;由于CSS层级问题 导致外层主页面的CSS对<iframe>中的控件无效... 解决方案&#xff1a; &#xff08;1&#xff09;用<jsp:include>啊&#xff0c;CSS不失效&#xff0c;哈哈哈哈 &#xff08;2&#xff09;把CSS引用路…

第七期:详解JavaScript运行机制(Event Loop)

在浏览器中,每个渲染进程都有一个主线程,主线程非常繁忙&#xff0c;既要处理DOM&#xff0c;又要计算样式&#xff0c;还要处理布局&#xff0c;同时还需要处理JavaScript任务以及各种输入事件。此时我们就需要一个系统来统筹调度这么多不同类型的任务在主线程中有条不紊地执行…

Spring框架 JdbcTemplate类 @Junit单元测试,可以让方法独立执行 如:@Test

1 package cn.zmh.PingCe;2 3 import org.junit.Test;4 import org.springframework.jdbc.core.BeanPropertyRowMapper;5 import org.springframework.jdbc.core.JdbcTemplate;6 7 import java.util.List;8 import java.util.Map;9 /** 10 * Spring框架 JdbcTemplate类 11 …

[剑指offer]面试题第[45]题[JAVA][把数组排成最小的数][快排][ Comparator][PriorityQueue]

【问题描述】[中等] 【解答思路】 1. 快速排序 时间复杂度&#xff1a;O(N^2) 空间复杂度&#xff1a;O(1) class Solution {public String minNumber(int[] nums) {String[] strs new String[nums.length];for(int i 0; i < nums.length; i)strs[i] String.valueOf(num…

div覆盖div DIV相互重叠如何解决

转载出处&#xff1a;http://www.divcss5.com/rumen/r674.shtml div覆盖div,出现div与div盒子之间产生重叠覆盖现象&#xff0c;而内容没有出现覆盖重叠现象原因与解决方法。DIVCSS5通过CSS图文案例介绍产生原因与解决方法。DIV与DIV覆盖原因与解决方法。 可能您遇到过上下结…

第二十五期:5G预约用户超千万!是“虚火”还是“真旺”?

十一假期刚过&#xff0c;“中国5G套餐预约数已超千万”的消息就迅速在朋友圈刷屏&#xff0c;这一庞大的数字背后&#xff0c;也引发了业界关于5G市场的种种思考和担忧&#xff1a;预约热闹过后真正的5G用户会有多少?暂时不选择5G的用户有何顾虑? 十一假期刚过&#xff0c;“…

oracle索引

简介 1.说明 1&#xff09;索引是数据库对象之一&#xff0c;用于加快数据的检索&#xff0c;类似于书籍的索引。在数据库中索引可以减少数据库程序查询结果时需要读取的数据量&#xff0c;类似于在书籍中我们利用索引可以不用翻阅整本书即可找到想要的信息。 2&#xff09;索引…

第八期:实操:两台路由器,如何分别通过WAN和LAN口连接?

两个路由器在一个网段内IP地址是一样的&#xff0c;两个路由器连接有两个DHCP服务器共同工作所以IP会产生冲突。下面我们来一起看下分别通过WAN口和LAN口怎么连接。 两个路由器在一个网段内IP地址是一样的&#xff0c;两个路由器连接有两个DHCP服务器共同工作所以IP会产生冲突。…

cognos10 安装部署

由于工作的原因&#xff0c;今天需要安装下cognos10&#xff0c;由于以前没有接触过IBM的这个产品&#xff0c;因此付出了一天时间的惨痛代价&#xff0c;写这篇文章的目的就是对cognos10的初学者安装部署时能少走弯路&#xff0c;各位cognos的大侠请多批评和指教&#xff0c;不…