BZOJ1298:[SCOI2009]骰子的学问

Description

Input

第一行为两个整数n, m。第二行有n个整数,为a1,a2, …, an。

Output

包含n行,每行m个1~n×m的正整数,各不相同,以空格分开。如果有多解,输出任意一组解;如果无解,输出一个整数0。

Sample Input & Sample Output

HINT

30%的数据满足n, m≤10

100%的数据满足3≤n, m≤200

 

题解:

把ai认为是i的父亲,使其连边,那么题目给出的关系构成了一个基环树森林。

对于在环外、指向环的边(即“树”的部分),使骰子的每一个面都比其父亲大。

观察1、4样例可以发现一个构造方式:对于一个大小为n环,从第一个点开始,逆着父亲边放入1~n;再从第一个点在环上的儿子开始,逆着父亲边以此放入n+1~2*n,直到放满n*m个数。

但是这个构造法在样例3中失败了。事实上,可以证明,只有在像样例3这种环大小为3骰子面数为4的情况下,该方法会失效。对于这种情况,进行特判。

注意环大小为2或是m<=2的情况,一定无法构造。

 

代码:

 1 const
 2   bb:array[1..12]of longint=(1,2,4,3,7,5,10,8,6,11,9,12);
 3 var
 4   i,j,k,l,n,m,cnt:longint;
 5   fa,a,b,c:array[0..1001]of longint;
 6   d:array[0..1001,0..1001]of longint;
 7 procedure ss2(x:longint);
 8 var i:longint;
 9 begin
10   if a[x]<2 then
11   begin
12     for i:=1 to m do
13     begin inc(cnt); d[x,i]:=cnt; end;
14     a[x]:=2;
15   end;
16   i:=c[x];
17   while i>0 do
18   begin
19     if a[i]<2 then ss2(i);
20     i:=b[i];
21   end;
22 end;
23 procedure ss(x:longint);
24 var i,j,k,l,xx:longint;
25 begin
26   a[x]:=1; x:=fa[x];
27   while a[x]=0 do
28   begin
29     a[x]:=1; x:=fa[x];
30   end;
31   k:=1; xx:=fa[x]; a[x]:=2;
32   while x<>xx do begin inc(k); a[xx]:=2; xx:=fa[xx]; end;
33   if k<=2 then begin writeln(0); halt; end;
34   if(k=3)and(m=4)then
35   begin
36     for i:=1 to 12 do
37     begin
38       d[x,1+((i-1)div 3)]:=bb[i];
39       x:=fa[x];
40     end;
41   end else
42   begin
43     for i:=1 to m do
44     begin
45       l:=cnt+k;
46       for j:=1 to k do
47       begin
48         d[x,i]:=l; dec(l);
49         if j<>k then x:=fa[x];
50       end;
51       cnt:=cnt+k;
52     end;
53   end;
54   for i:=1 to k do
55   begin
56     ss2(x); x:=fa[x];
57   end;
58 end;
59 begin
60   readln(n,m);
61   for i:=1 to n do
62   begin
63     read(fa[i]);
64     b[i]:=c[fa[i]]; c[fa[i]]:=i;
65   end;
66   for i:=1 to n do
67   if a[i]=0 then ss(i);
68   for i:=1 to n do
69   begin
70     for j:=1 to m do write(d[i,j],' ');
71     writeln;
72   end;
73 end.
View Code

转载于:https://www.cnblogs.com/GhostReach/p/6255679.html

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

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

相关文章

mysql交叉连接后生成的记录总数_4.mysql数据库创建,表创建模等模板脚本,mysql_SQL99标准的连接查询(内连接,外连接,满外连接,交叉连接)_MySQL...

--用root用户登录系统&#xff0c;执行脚本--创建数据库create database mydb61 character set utf8 ;--选择数据库use mydb61;--增加 dbuser1用户--创建用户‘dbuser61’密码为‘dbuser61’拥有操作数据库mydb61的所有权限GRANT ALL ON mydb61.* TO dbuser61 IDENTIFIED BY &q…

IIS网站或系统验证码不显示问题——使用了托管的处理程序,但是未安装或未完整安装 ASP.NET...

在IIS上发布了一个系统&#xff0c;但是登陆页面的验证码图片一直出不来&#xff0c;尝试了各种办法&#xff0c;权限、路径、继承父类路径等都不管用&#xff0c;进入Login.html,对着无验证码图片的图标&#xff0c;右键复制图片的网址&#xff0c;粘贴到地址栏&#xff0c;出…

mysql索引有字符集_07. 类型、字符集、引擎和索引

字符集是什么&#xff1f;为了更好的识别中文、日文、英文、希腊语。对于常用的符号进行了编码&#xff0c;这个编码就是字符集。字符集确定了文字的存储方式。字符集相当于是计算机中人类的语言。举个例子&#xff1a;我说的是英文&#xff0c;所以我存储的时候要用英文文字来…

oracle--第一天PLSQL--bai

第一天&#xff1a; -- 创建book表 create table book ( bid number primary key, bname varchar2(20) not null, price number(10,2) not null ) -- 插入数据 insert into book(bid,bname,price)values(20,西游记,170.5); insert into book(bid,bname,price)values(12,红楼梦,…

mysql性能优化的8个方法_关键的十个MySQL性能优化技巧

与所有的关系型数据库一样&#xff0c;Mysql仿佛是一头让人难以琢磨的怪兽。它会随时停摆&#xff0c;让应用限于停滞&#xff0c;或者让你的业务处于危险之中。事实上&#xff0c;许多最常见的错误都隐藏在MySQL性能问题的背后。为了确保你的MySQL服务器能够一直处于全速运行的…

修改自己的centos输入法

当自己的centos连上网时&#xff0c;就可以修改自己的输入法了 http://jingyan.baidu.com/album/da1091fb3e7f8a027849d681.html?picindex2 转载于:https://www.cnblogs.com/xiaoyoucai/p/6262054.html

new float查询长度 c++_C/C++经典面试题

面试题 1&#xff1a;变量的声明和定义有什么区别 为变量分配地址和存储空间的称为定义&#xff0c;不分配地址的称为声明。一个变量可以在多个地方声明&#xff0c; 但是只在一个地方定义。加入 extern 修饰的是变量的声明&#xff0c;说明此变量将在文件以外或在文件后面部分…

git相关资料

https://github.com/xirong/my-git 转载于:https://www.cnblogs.com/zhao1949/p/6265503.html

mysql动态变量查询_MySQL将变量传递给动态查询

对不起&#xff0c;如果这是一个基本问题&#xff01; 直至现在我已经创造了PHP的MySQL查询和跨变量传递SQL调用中是这样的&#xff1a;MySQL将变量传递给动态查询$myparam $_GET["id_tbl"];mysql_select_db($database_camerich, $camerich);$query_rs_table sprin…

java8--IO(java疯狂讲义3复习笔记)

产生文件 File file new File("abc.txt");if(!file.exists()){System.out.println(file.exists());file.createNewFile();}System.out.println(file.getAbsolutePath()); 关于临时文件 1).放在指定目录,此时已项目为默认目录 File file File.createTempFile("…

python网络平台_python学习(九) 网络编程学习--简易网站服务器

python 网络编程和其他语言都是一样的&#xff0c;服务器这块步骤为&#xff1a;1. 创建套接字2. 绑定地址3. 监听该描述符的所有请求4. 有新的请求到了调用accept处理请求Python Web服务器网关接口(Python Web Server Gateway Interface&#xff0c;简称“WSGI”)&#xff0c;…

LeetCode 451. Sort Characters By Frequency

Mediocre solution is O(nlgn) by using max-heap - but, remember bucket sort? it is O(n)转载于:https://www.cnblogs.com/tonix/p/6269000.html

rabbit和mysql事务_分布式事务原理及SpringBoot整合RabbitMQ实现可靠事件,TCC事务模型及接口幂等性...

分布式事务我们知道在单数据库系统中&#xff0c;实现数据的一致性&#xff0c;通过数据库的事务来处理比较简单。在微服务或分布式系统中&#xff0c;各个独立的服务都会有自己的数据库&#xff0c;而不是在同一个数据库中&#xff0c;所以当一组事务(如商品交易中&#xff0c…

rhel Linux 网络配置

--网络配置 vi /etc/sysconfig/network-scripts/ifcfg-eth0 1)DHCPDEVICEeth0BOOTPROTOdhcpONBOOTyes2)静态IP DEVICEeth0 BOOTPROTOnone IPADDR192.168.0.22 NETMASK255.255.255.0GATEWAY192.168.0.254DNS11…

如何下载php-5.5.38.tar.gz_搭建PHP服务器php-5.3.28.tar.gz

构建PHP运行环境PHP所用的软件 &#xff1a;php-5.3.28.tar.gz优化模块 &#xff1a;ZendGuardLoader-php-5.3-linux-glibc23-x86_64.tar.gz(两者之间版本一样)准备工作&#xff1a;卸载RPM安装的PHP[rootlocalhost php]# rpm -e php php-cli php-ldap php-common php-mysql --…

004-全局应用程序类Global.asax

服务器对象&#xff1a;Request、Response、Server、Session、Application、Cookie //功能1&#xff1a;为服务器对象注册Start、End处理 protected void Application_Start(object sender, EventArgs e){} protected void Application_End(object sender, EventArgs e){} 管道…

mysql创建表的时候日期给个默认值_mysql 创建表时 日期字段默认值为当前时间...

mysql 创建表时 日期字段默认值为当前时间mysql version 5.1在mysql创建表的时候经常会遇到创建日期字段需要设置当前时间为默认值的时候&#xff0c;就如sqlserver2000一样&#xff0c;把默认值设为getdate()即可&#xff0c;我在网上查了N久都没有查到使用有效的方法&#xf…

Android onKeyDown、onKeyUp、dispatchKeyEvent的区别

1. onKeyDown、onKeyUp、dispatchKeyEvent的区别和使用场景 区别&#xff1a;   1.1 onKeyDown、onKeyUp是按键事件的回调接口&#xff08;冒泡式调用&#xff09;&#xff0c;dispatchKeyEvent是按键分发&#xff08;隧道式分发&#xff09; 1.2 onKeyDown接口的回调只…

python pandas 数据库_Python中pandas函数操作数据库

一&#xff1a;创建链接数据库引擎Pythonfrom sqlalchemy import create_engineengine create_engine(postgresql://user58.251.157.179:port/database,echo True)echo True &#xff0c;会显示在加载数据库所执行的SQL语句。12345fromsqlalchemyimportcreate_engineenginecr…

策略模式,工厂模式,单例模式编写身份证的验证算法

策略模式&#xff1a;它定义算法家族&#xff0c;分别封装起来&#xff0c;让他们之间互相替换&#xff0c;此模式让算法的变化&#xff0c;不会影响使用算法的客户。 1 /// <summary>2 /// 策略模式3 /// </summary>4 public interface IidCheck5 …