Java实现 蓝桥杯VIP 算法提高 传染病控制
算法提高 传染病控制
时间限制:1.0s   内存限制:512.0MB
问题描述
  近来,一种新的传染病肆虐全球。蓬莱国也发现了零星感染者,为防止该病在蓬莱国大范围流行,该国政府决定不惜一切代价控制传染病的蔓延。不幸的是,由于人们尚未完全认识这种传染病,难以准确判别病毒携带者,更没有研制出疫苗以保护易感人群。于是,蓬莱国的疾病控制中心决定采取切断传播途径的方法控制疾病传播。经过 WHO(世界卫生组织)以及全球各国科研部门的努力,这种新兴传染病的传播途径和控制方法已经研究消楚,剩下的任务就是由你协助蓬莱国疾控中心制定一个有效的控制办法。
问题描述
  研究表明,这种传染病的传播具有两种很特殊的性质;
  第一是它的传播途径是树型的,一个人X只可能被某个特定的人Y感染,只要Y不得病,或者是XY之间的传播途径被切断,则X就不会得病。
  第二是,这种疾病的传播有周期性,在一个疾病传播周期之内,传染病将只会感染一代患者,而不会再传播给下一代。
  这些性质大大减轻了蓬莱国疾病防控的压力,并且他们已经得到了国内部分易感人群的潜在传播途径图(一棵树)。但是,麻烦还没有结束。由于蓬莱国疾控中心人手不够,同时也缺乏强大的技术,以致他们在一个疾病传播周期内,只能设法切断一条传播途径,而没有被控制的传播途径就会引起更多的易感人群被感染(也就是与当前已经被感染的人有传播途径相连,且连接途径没有被切断的人群)。当不可能有健康人被感染时,疾病就中止传播。所以,蓬莱国疾控中心要制定出一个切断传播途径的顺序,以使尽量少的人被感染。你的程序要针对给定的树,找出合适的切断顺序。
输入格式
  输入格式的第一行是两个整数n(1≤n≤300)和p。接下来p行,每一行有两个整数i和j,表示节点i和j间有边相连(意即,第i人和第j人之间有传播途径相连,注意:可能是i到j也可能是j到i)。其中节点1是已经被感染的患者。
  对于给定的输入数据,如果不切断任何传播途径,则所有人都会感染。
输出格式
  只有一行,输出总共被感染的人数。
样例输入
7 6
1 2
1 3
2 4
2 5
3 6
7 3
样例输出
3
import java.util.Scanner;
public class Main {
	private static int d[],min=Integer.MAX_VALUE,yn[];
	private Node head[],temp[];
	public void setHead(int n) {
		this.head = new Node[n];
	}
	public void setTemp(int n) {
		this.temp = new Node[n];
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		int n,m,i,x,y,a[];
		Node t;
		n=Integer.parseInt(sc.next());
		m=Integer.parseInt(sc.next());
		Main idc=new Main();
		idc.setHead(n);idc.setTemp(n);
		d=new int[n];
		yn=new int[n];
		for(i=0;i<n;i++)
		{
			idc.head[i]=idc.new Node();
			idc.temp[i]=idc.head[i];
		}
		for(i=0;i<m;i++)
		{
			x=Integer.parseInt(sc.next())-1;
			y=Integer.parseInt(sc.next())-1;
			d[x]++;d[y]++;
			t=idc.new Node();t.n=y;
			idc.temp[x].next=t;idc.temp[x]=t;
			t=idc.new Node();t.n=x;
			idc.temp[y].next=t;idc.temp[y]=t;
		}
		d[0]++;
		for(i=0;i<n;i++)d[i]--;
		yn[0]=1;
		a=new int[1];
		chuanran(a,idc,1);
		System.out.println(min);
	}
	private static void chuanran(int[] a, Main idc, int num) {
		// TODO Auto-generated method stub
		int n=a.length,i,newn=num,na[],t,m,j;
		Node te;
		for(i=0;i<n;i++)if(a[i]!=-1)newn+=d[a[i]];
		if(newn==num)
		{
			if(newn<min)min=newn;
			return;
		}
		newn--;
		if(newn>min)return;
		else
		{
			m=newn-num+1;
			na=new int[m];
			for(i=0,j=0;i<n;i++)
			{
				if(a[i]!=-1)
				{
					for(te=idc.head[a[i]].next;te!=null;te=te.next)
					{
						if(yn[te.n]==1)continue;
						else
						{
							na[j]=te.n;j++;
							yn[te.n]=1;
						}
					}
				}
			}
			for(i=0;i<m;i++)
			{
				t=na[i];
				na[i]=-1;
				chuanran(na, idc, newn);
				na[i]=t;
			}
			for(i=0;i<m;i++)yn[na[i]]=0;
			return;
		}
	}
	class Node{
		int n;
		Node next;
	}
}
Java实现 蓝桥杯VIP 算法提高 传染病控制的更多相关文章
- Java实现 蓝桥杯VIP 算法提高 研究兔子的土豪
		试题 算法提高 研究兔子的土豪 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 某天,HWD老师开始研究兔子,因为他是个土豪 ,所以他居然一下子买了一个可以容纳10^18代兔子的巨大 ... 
- Java实现 蓝桥杯VIP 算法提高 3-2求存款
		算法提高 3-2求存款 时间限制:1.0s 内存限制:256.0MB 问题描述 见计算机程序设计基础(乔林)P50第5题. 接受两个数,一个是用户一年期定期存款金额,一个是按照百分比格式表示的利率,计 ... 
- Java实现 蓝桥杯VIP 算法提高 3-3求圆面积表面积体积
		算法提高 3-3求圆面积表面积体积 时间限制:1.0s 内存限制:256.0MB 问题描述 接受用户输⼊的数值,输出以该值为半径的(1)圆面积,(2)球体表面积,(3)球体体积.pi 取值3.1415 ... 
- Java实现 蓝桥杯VIP 算法提高 5-3日历
		算法提高 5-3日历 时间限制:1.0s 内存限制:256.0MB 问题描述 已知2007年1月1日为星期一.设计一函数按照下述格式打印2007年以后(含)某年某月的日历,2007年以前的拒绝打印.为 ... 
- Java实现 蓝桥杯VIP 算法提高 11-2删除重复元素
		算法提高 11-2删除重复元素 时间限制:10.0s 内存限制:256.0MB 问题描述 为库设计新函数DelPack,删除输入字符串中所有的重复元素.不连续的重复元素也要删除. 要求写成函数,函数内 ... 
- Java实现 蓝桥杯VIP 算法提高 P0401
		算法提高 P0401 时间限制:1.0s 内存限制:256.0MB 输入一个无符号整数x,输出x的二进制表示中1的个数. 输入: 76584 输出: 7 import java.util.Scanne ... 
- Java实现 蓝桥杯VIP 算法提高 理财计划
		算法提高 理财计划 时间限制:1.0s 内存限制:256.0MB 问题描述 银行近期推出了一款新的理财计划"重复计息储蓄".储户只需在每个月月初存入固定金额的现金,银行就会在每个月 ... 
- Java实现 蓝桥杯VIP 算法提高 解二元一次方程组
		算法提高 解二元一次方程组 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个二元一次方程组,形如: a * x + b * y = c; d * x + e * y = f; x,y代 ... 
- Java实现 蓝桥杯VIP 算法提高 陶陶摘苹果2
		算法提高 陶陶摘苹果2 时间限制:1.0s 内存限制:256.0MB 问题描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出n个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个30厘米高的板凳, ... 
随机推荐
- Kitty Cloud(HTTP_RPC)的全局异常处理
			项目地址 https://github.com/yinjihuan/kitty-cloud 异常处理不用我讲,大家都清楚.单独的异常处理太繁琐,全局异常处理可以在一个应用中统一进行异常的处理,非常方便 ... 
- [ACdream 1211 Reactor Cooling]无源无汇有上下界的可行流
			题意:无源无汇有上下界的可行流 模型 思路:首先将所有边的容量设为上界减去下界,然后对一个点i,设i的所有入边的下界和为to[i],所有出边的下界和为from[i],令它们的差为dif[i]=to[i ... 
- JQ选择器-选择符合条件的元素,获取对应关系元素
			如果你想寻找id以“sub_”开头的元素,你可以使用: $("*[id^='sub_']") 如果你想寻找id以“trim”结尾的元素,你可以使用: $("*[id$=' ... 
- linux下安装gmp遇到 configure:error:no usable m4 in$path or /user/5bin解决方案
			安装过程中遇到如下报错: 上面的报错是因为你没有安装m4,安装m4就可以了:以下两种命令人选其一: #yum install m4 或 #apt-get install m4 ps:如果遇到权限问题就 ... 
- 全网最全Docker命令详解
			由于最近在学习Docker,在这里把有关Docker的命令做一个集合,方便后面查看: # docker --help Usage: docker [OPTIONS] COMMAND [arg...] ... 
- 4.2 Go switch
			4.2 Go switch switch语句用于基于不同条件执行不同动作,每一个case分支唯一,自上而下逐一测试,直到匹配结束,默认自动终止,不需要break. 2. switch基本语法 swit ... 
- 利用logrotate将mysql log截断
			https://blog.pythian.com/mysql-log-rotation/ 1.授权用户 CREATE USER 'log_rotate'@'localhost' IDENTIFIED ... 
- python3.x 基础八:socket网络编程
			Socket socket就是一直以来说的“套接字”,用于描述:ip:端口,是通信链的句柄,客户端通过这个句柄进行请求和响应 普通文件的操作顺序:打开-读写-关闭,针对的是文件 socket是特殊的文 ... 
- 自定义spring-boot-starter
			需求背景: Springboot是Spring旗下优秀的子项目之一,其核心理念之一:约定优于配置.通过自动化的配置极大的提升了我们的开发效率,目前已集成诸多组件的starter起步依赖,帮助我们更加快 ... 
- 浅析String、StringBuilder、StringBuffer
			谈谈我对 String.StringBuilder.StringBuffer 的理解 StringBuilder.StringBuffer 和 String 一样,都是用于存储字符串的. 1.那既然有 ... 
