试题 算法训练 Professor Monotonic’s Network

资源限制

时间限制:1.0s 内存限制:256.0MB

问题描述

  无聊的教授最近在做一项关于比较网络的实验。一个比较网络由若干个含两个输入端和两个输出端的比较器组成。如下图,一个比较器将会比较它的两个输入端的值i1和i2,把它们防止在输出端o1和o2上使得o1<=o2。

一个比较网络有n个输入端a1,a2,…,an和n个输出端b1,b2,…,bn。对于每个比较器,它的输入端要么直接连在比较网络的输入端上,要么连在另一个个比较器的输出端上。这样的关系组成的有向图是无环的。下图给出了一个拥有4个输入端、4个输出端、5个比较器的比较网络。



  在比较网络运行时,值从输入端输入,然后比较器开始工作。当然,一个比较器仅当它的所有输入值已经被算出来后才能开始工作。假设一个比较器需要1单位时间来工作。那么,上面的例子中的比较网络需要3单位时间来计算输出值。图中的comp-1和comp-2是并行工作的,comp-3和comp-4也是,comp-5只有等comp-3和comp-4完成后才能工作。

  无聊的教授现在需要帮助确定那些比较网络是排序网络,并且它们需要多长时间来计算输出值。一个排序网络是一个比较网络,并且无论输入如何,它的输出都单调增。上面的例子也是一个比较网络。因为对于每一种可能的输入,输出值都存在关系b1<=b2<=b3<=b4。

输入格式

  第一行两个整数n,k,分别表示输入值的个数和比较器的个数。

  它们满足1<=n<=12,0<=k<=150。

  之后从左到右依次给出每个比较器的信息

  之后每行两个整数x,y表示第i个比较器将ax,ay做了比较,把其中较小的数放回ax,较大的数放回ay。

输出格式

  第一行输出YES或NO表示该比较网络是否是排序网络

  第二行输出一个整数表示该比较网络的运行时间。

样例输入

样例1:

4 5

1 2

3 4

1 3

2 4

2 3

样例2:

8 0

样例3:

3 3

1 2

2 3

1 2

样例输出

样例1:

YES

3

样例2:

NO

0

样例3:

YES

3

样例说明

  样例1即图片上所给的比较网络。

package 第九次模拟;

import java.util.Scanner;

public class 排序 {
public static class Node{
int first;
int second;
}
static int n=0,m=0,x=0,y=0;
static int N=15;
static int []a = new int [N];
static int [] num = new int [N];
static int res=0;
static int cnt=0;
static Node [] T = new Node[155];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt(); while(m-->0){
x= sc.nextInt();
y = sc.nextInt();
T[++cnt]=new Node();
T[cnt].first=x;
T[cnt].second=y;
int t =Math.max(num[x], num[y])+1;
num[x]=t;
num[y]=t;
res=Math.max(res, t);
}
sc.close();
boolean yes=true;
for(int i=0;i<(1<<n);i++){
for(int j=0;j<n;j++){
a[j+1]=(i>>j&1);
}
for(int j=1;j<=cnt;j++){
x=T[j].first;
y=T[j].second;
int tt=Math.min(a[x],a[y]);
a[y]=Math.max(a[x],a[y]);
a[x]=tt;
}
for(int j=1;j<n;j++)
if(a[j]==1&&a[j+1]==0){
yes=false;break;
}
if(!yes)
break;
}
if(yes)
System.out.println("YES");
else
System.out.println("NO"); System.out.println(res);
} }
package 第九次模拟;

import java.util.Scanner;

public class 排序 {
//转自https://blog.csdn.net/a1439775520/article/details/104653580
public static class Node{
int first;
int second;
} public static void main(String[] args) {
int n=0,m=0,x=0,y=0;
int N=15; int [] num = new int [N];
int res=0;
int cnt=0;
int t=0;
Node [] T = new Node[155];
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt(); while(m-->0){
x= sc.nextInt();
y = sc.nextInt();
T[++cnt]=new Node();
T[cnt].first=x;
T[cnt].second=y;
t = Math.max(num[x], num[y])+1;
num[x]=t;
num[y]=t;
res= Math.max(res, t);
}
sc.close();
int []a = new int [N];
int tt=0;
// boolean yes=true;
for(int i=0;i<(1<<n);i++){
for(int j=0;j<n;j++){
a[j+1]=(i>>j&1);
}
for(int j=1;j<=cnt;j++){
x=T[j].first;
y=T[j].second;
tt= Math.min(a[x],a[y]);
a[y]= Math.max(a[x],a[y]);
a[x]=tt;
}
for(int j=1;j<n;j++)
if(a[j]==1&&a[j+1]==0){
System.out.println("NO");
System.out.println(res);return;
}
// if(!yes)
// break;
}
// if(yes)
System.out.println("YES");
// else
// System.out.println("NO"); System.out.println(res);
}
// public static int min(int a,int b){
// return a<b?a:b;
// }
// public static int max(int a,int b){
// return a<b?b:a;
// } }

Java实现蓝桥杯 算法训练 Professor Monotonic's Network的更多相关文章

  1. Java实现 蓝桥杯 算法训练 猴子吃包子(暴力)

    试题 算法训练 猴子吃包子 问题描述 从前,有一只吃包子很厉害的猴子,它可以吃无数个包子,但是,它吃不同的包子速度也不同:肉包每秒钟吃x个:韭菜包每秒钟吃y个:没有馅的包子每秒钟吃z个:现在有x1个肉 ...

  2. Java实现蓝桥杯 算法训练 大等于n的最小完全平方数

    试题 算法训练 大等于n的最小完全平方数 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 输出大等于n的最小的完全平方数. 若一个数能表示成某个自然数的平方的形式,则称这个数为完全平 ...

  3. java实现 蓝桥杯 算法训练 Password Suspects

    问题描述 在年轻的时候,我们故事中的英雄--国王 Copa--他的私人数据并不是完全安全地隐蔽.对他来说是,这不可接受的.因此,他发明了一种密码,好记又难以破解.后来,他才知道这种密码是一个长度为奇数 ...

  4. Java实现 蓝桥杯 算法训练VIP 报数(暴力+数学)约瑟夫环问题

    试题 算法训练 报数 问题描述 现有n个同学站成一圈,顺时针编号1至n.从1号同学开始顺时针1/2报数,报到1的同学留在原地,报到2的同学退出圆圈,直到只剩一名同学为止.问最后剩下的同学编号. 输入格 ...

  5. Java实现蓝桥杯 算法训练 ALGO-15 旅行家的预算

    问题描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能行驶的距离D2.出发点每升汽油价格P和沿 ...

  6. Java实现 蓝桥杯 算法训练 审美课

    算法训练 审美课 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 <审美的历程>课上有n位学生,帅老师展示了m幅画,其中有些是梵高的作品,另外的都出自五岁小朋友之手.老师 ...

  7. Java实现 蓝桥杯 算法训练 多阶乘计算

    试题 算法训练 多阶乘计算 问题描述 我们知道,阶乘n!表示n*(n-1)(n-2)-21, 类似的,可以定义多阶乘计算,例如:5!!=531,依次可以有n!..!(k个'!',可以简单表示为n(k) ...

  8. Java实现 蓝桥杯 算法训练 找零钱

    试题 算法训练 找零钱 问题描述 有n个人正在饭堂排队买海北鸡饭.每份海北鸡饭要25元.奇怪的是,每个人手里只有一张钞票(每张钞票的面值为25.50.100元),而且饭堂阿姨一开始没有任何零钱.请问饭 ...

  9. Java实现 蓝桥杯 算法训练 第五次作业:字符串排序

    试题 算法训练 第五次作业:字符串排序 问题描述 输入一个小写字符串,按从小到大的顺序输出. 输入格式 bcaed 输出格式 abcde 顶格输出,中间没有空格 样例输入 一个满足题目要求的输入范例. ...

随机推荐

  1. OpenCV 3.4.2 Windows系统下的环境搭建(附带opencv_contrib-3.4.2)

    前言 当前需要回到Windows平台下进行开发,在win10系统上搭建了编译opencv3.4.2的环境,并添加opencv_contrib-3.4.2的模块,以下是本文所需要的软件以及源码. 系统: ...

  2. 爬虫系列 一次采集.NET WebForm网站的坎坷历程

    今天接到一个活,需要统计人员的工号信息,由于种种原因不能直接连数据库 [无奈].[无奈].[无奈].采取迂回方案,写个工具自动登录网站,采集用户信息. 这也不是第一次采集ASP.NET网站,以前采集的 ...

  3. nginx脚本自动安装

    nginx脚本自动安装 脚本功能: 自动安装nginx 自动判别系统是否安装nginx 自定义安装nginx路径 自定义安装nginx版本. #!/bin/bash #2019年10月30日16:00 ...

  4. 3D三栅极晶体管(摘抄)

    英特尔的科学家们在2002年发明了三栅极晶体管——这是根据栅极有三面而取名的. 传统“扁平的”2D平面栅极被超级纤薄的.从硅基体垂直竖起的3D硅鳍状物所代替.电流控制是通过在鳍状物三面的每一面安装一个 ...

  5. RMQ问题总结,标准RMQ算法的实现

    RMQ问题:对于长度为N的序列,询问区间[L,R]中的最值 RMQ问题的几种解法: 普通遍历查询,O(1)-O(N) 线段树,O(N)-O(logN) DP,O(NlogN)-O(1) RMQ标准算法 ...

  6. HDU 2007 (水)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2007 题目大意:给你段连续数字,让你求 all sum of (偶数2 )and all sum of ...

  7. Python脚本:实现excel表格导入到数据库,支持mysql,postgresql,MongoDB

    import xlrd,re from datetime import datetime from xlrd import xldate_as_tuple # 判断上传表格是否与模板要求一致 def ...

  8. 仅需60秒,使用k3sup快速部署高可用K3s集群

    作者简介 Dmitriy Akulov,连续创业者,16岁时搭建了开源CDN公共服务jsDelivr的v1版本.目前是边缘托管平台appfleet创始人. 原文链接: https://ma.ttias ...

  9. removebg抠图小工具

    由于比较简单,直接上代码(removebg接口官网),更多小工具获取 (1)官网API,需注册获取X-Api-Key:removebg_官网api.py import requests respons ...

  10. 利用js实现 禁用浏览器后退| 去除上一个历史记录链接

    也是查找了好多资料才找到的,这种方式,可以消除 后退的所有动作.包括 键盘.鼠标手势等产生的后退动作. <script language="javascript"> / ...