【CodeForces - 266C】Below the Diagonal (递归,子问题,贪心模拟)

题干:

You are given a square matrix consisting of n rows and n columns. We assume that the rows are numbered from 1 to n from top to bottom and the columns are numbered from 1to n from left to right. Some cells (n - 1 cells in total) of the the matrix are filled with ones, the remaining cells are filled with zeros. We can apply the following operations to the matrix:

  1. Swap i-th and j-th rows of the matrix;
  2. Swap i-th and j-th columns of the matrix.

You are asked to transform the matrix into a special form using these operations. In that special form all the ones must be in the cells that lie below the main diagonal. Cell of the matrix, which is located on the intersection of the i-th row and of the j-th column, lies below the main diagonal if i > j.

Input

The first line contains an integer n (2 ≤ n ≤ 1000) — the number of rows and columns. Then follow n - 1 lines that contain one's positions, one per line. Each position is described by two integers xk, yk (1 ≤ xk, yk ≤ n), separated by a space. A pair (xk, yk) means that the cell, which is located on the intersection of the xk-th row and of the yk-th column, contains one.

It is guaranteed that all positions are distinct.

Output

Print the description of your actions. These actions should transform the matrix to the described special form.

In the first line you should print a non-negative integer m (m ≤ 105) — the number of actions. In each of the next m lines print three space-separated integers t, i, j(1 ≤ t ≤ 2, 1 ≤ i, j ≤ n, i ≠ j), where t = 1 if you want to swap rows, t = 2 if you want to swap columns, and i and j denote the numbers of rows or columns respectively.

Please note, that you do not need to minimize the number of operations, but their number should not exceed 105. If there are several solutions, you may print any of them.

Examples

Input

2
1 2

Output

2
2 1 2
1 1 2

Input

3
3 1
1 3

Output

3
2 2 3
1 1 3
1 1 2

Input

3
2 1
3 2

Output

0

题目大意:

给你一个n*n的矩阵并且其中有n-1个位置是1(其他位置是0)

每次可以交换其中任意两行或者两列

求在10^5个交换内把所有的1都交换到对角线以下(横坐标大于纵坐标)的方法

答案可以有很多,写出任意一个即可。(并且某次交换中 行==列  是不允许的)

解题报告:

   其实这道题想出来就不难了,,,代码也不算难实现,,坑也不算多。。(问题就是想不到啊还是做题少了)

   思路就是我们因为有n-1个1,所以肯定存在一列里面全为0,此时把这一列移到最右边。然后再找一行有1的,把他和最后一行交换。(也可以  如果最后一行全为0  ,才执行第二个操作)

此时,我们就可以把问题变成在前(n-1)*(n-1)的矩阵中把最多n-2个点移到左下角的问题

   有个小细节,因为行列相等不算交换,,所以循环中就不能加for(i=1;i<=n;i++)中的等号了。

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
#define fi first
#define se second
using namespace std;
const int MAX = 2e5 + 5;
int maze[1005][1005];
int x[MAX],y[MAX];
int tot;
struct Node {int t,a,b;Node(){}Node(int t,int a,int b):t(t),a(a),b(b){}
} node[MAX];
void dfs(int n) {if(n == 1) return ;for(int j = 1; j<n; j++) {//枚举每一列 if(y[j] == 0) {for(int i = 1; i<=n; i++) swap(maze[i][j],maze[i][n]);swap(y[j],y[n]);node[++tot] = Node(2,j,n); break;}}for(int i = 1; i<n; i++) {//枚举每一行 if(x[i] != 0) {for(int j = 1; j<=n; j++) swap(maze[i][j],maze[n][j]);swap(x[i],x[n]);node[++tot] = Node(1,i,n);break;}}for(int j = 1; j<=n-1; j++) {if(maze[n][j] == 1) y[j]--;}dfs(n-1);
}
int main()
{int all;cin>>all;for(int i = 1; i<=all-1; i++) {int a,b;scanf("%d%d",&a,&b);maze[a][b]=1;x[a]++;y[b]++;}dfs(all);printf("%d\n",tot);for(int i = 1; i<=tot; i++) printf("%d %d %d\n",node[i].t,node[i].a,node[i].b);return 0 ;}

 

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

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

相关文章

python 0o_Python 中的比较:is 与 ==

在 Python 中会用到对象之间比较&#xff0c;可以用 &#xff0c;也可以用 is 。但是它们的区别是什么呢&#xff1f;is 比较的是两个实例对象是不是完全相同&#xff0c;它们是不是同一个对象&#xff0c;占用的内存地址是否相同。莱布尼茨说过&#xff1a;“世界上没有两片完…

python中long类型_浅谈python 四种数值类型(int,long,float,complex)

Python支持四种不同的数值类型,包括int(整数)long(长整数)float(浮点实际值)complex (复数),本文章向码农介绍python 四种数值类型,需要的朋友可以参考一下。 数字数据类型存储数值。他们是不可改变的数据类型,这意味着改变数字数据类型的结果,在一个新分配的对象的值。 N…

【CodeForces - 264A】Escape from Stones (模拟,卡精度的处理)

题干&#xff1a; Squirrel Liss lived in a forest peacefully, but unexpected trouble happens. Stones fall from a mountain. Initially Squirrel Liss occupies an interval [0, 1]. Next, nstones will fall and Liss will escape from the stones. The stones are nu…

python开发mbus程序_Python pywmbus包_程序模块 - PyPI - Python中文网

#WIP WM总线在Python中的实现本项目实施了无线m-bus标准的部分内容&#xff0c;定义见din en 13757-1及以下。目前&#xff0c;只支持未加密的短帧(即ci 0x7a)。欢迎拉取请求。##安装###点pip install pywmbus###手动git clone https://github.com/jalmeroth/pywmbus.gitcd pyw…

【CodeForces - 266B 】Queue at the School (模拟)

题干&#xff1a; During the break the schoolchildren, boys and girls, formed a queue of n people in the canteen. Initially the children stood in the order they entered the canteen. However, after a while the boys started feeling awkward for standing in fr…

查看git当前tag_Git - git tag - 查看当前分支 tag 版本说明

索引&#xff1a;参看代码 GitHub&#xff1a;一、示例&#xff1a;1 git tag -l -n二、说明:1."tag" 部分tag 代表的是标签动作,可以带参数 ,也可以不带参数,带上不同的参数可以实现标签的 新建/删除/查询/验证 等功能.2."-l" 部分-l 注意是字母"L&q…

【CodeForces - 270A】Fancy Fence (几何,思维,水题)

题干&#xff1a; Emuskald needs a fence around his farm, but he is too lazy to build it himself. So he purchased a fence-building robot. He wants the fence to be a regular polygon. The robot builds the fence along a single path, but it can only make fenc…

判断集合相等_数学启蒙的每个关键阶段之集合分类

本文我们将分享数学启蒙学什么&#xff1f;用几个字简单的归纳为集合、数、量、形、时间、空间。我们接下来会讲感知集合和分类&#xff0c;数概念&#xff0c;量的概念&#xff0c;形状包含平面图形和立体图形&#xff0c;空间方位和时间的初步概念。 家长们可以发现幼儿数学启…

【CodeForces - 271B 】Prime Matrix (素数,预处理打表,思维)

题干&#xff1a; Youve got an n  m matrix. The matrix consists of integers. In one move, you can apply a single transformation to the matrix: choose an arbitrary element of the matrix and increase it by 1. Each element can be increased an arbitrary numb…

【CodeForces - 270C】Magical Boxes (思维,进制,有坑)

题干&#xff1a; Emuskald is a well-known illusionist. One of his trademark tricks involves a set of magical boxes. The essence of the trick is in packing the boxes inside other boxes. From the top view each magical box looks like a square with side leng…

虚拟机安装黑群晖_【群晖系统】HEI群辉DSM 6.2.1 系统安装图文教程 (19年2月)

黑群晖系统其实是指在普通电脑运行Synology DSM系统, 事实上在普通PC电脑上安装黑群晖(Synology DSM)也非常方便, 现在把教程简单写一下。引导系统装哪里&#xff1f;非常关键的问题&#xff0c;DSM采用系统和数据相分离的结构&#xff0c;也就是说引导系统需要独立安装在一个设…

【Effect CodeForces - 270D】Greenhouse (思维,最长非递减子序列(上升),对偶问题,考虑反面)

题干&#xff1a; Emuskald is an avid horticulturist and owns the worlds longest greenhouse — it is effectively infinite in length. Over the years Emuskald has cultivated n plants in his greenhouse, of m different plant species numbered from 1 to m. His …

错误1053服务没有及时_无法启动xx服务 错误1053:服务没有及时响应启动或控制请求,排查方法。...

sc安装服务&#xff0c;启动失败&#xff1a;显示错误1053&#xff1a;服务没有及时响应启动或控制请求网上找了很多方法资料&#xff0c;什么注册表啊&#xff0c;权限啊之类的。你按照这些都做完后&#xff0c;仍然提示这个错误。告诉你&#xff0c;要检查自己的程序是不是有…

【CodeForces - 219D 】Choosing Capital for Treeland (树形dp)

题干&#xff1a; The country Treeland consists of n cities, some pairs of them are connected with unidirectional roads. Overall there are n - 1 roads in the country. We know that if we dont take the direction of the roads into consideration, we can get …

数据库分页查询mysql_各种数据库的分页查询SQL语句总结

1.oracle数据库分页select * from (select a.*,rownum rc from 表名 where rownum<endrow) a where a.rc>startrow2.DB2数据库分页Select * from (select rownumber() over() as rc,a.* from (select * from 表名 order by 列名) as a) where rc between startrow and en…

【HihoCoder - 1880】地铁环线 (前缀和,水题,模拟)

题干&#xff1a; H市有一环线地铁&#xff0c;一共包含N站&#xff0c;编号1~N。正向行驶的地铁会按1 -> 2 -> 3 -> ... -> N -> 1的方向行驶&#xff0c;反向会按1 -> N -> N-1 -> ... -> 3 -> 2 -> 1的方向行驶。 给定所有相邻两站之间…

unsigned int mysql_mysql 中int类型字段unsigned和signed的探索

转自&#xff1a;http://www.0791quanquan.com/news_keji/topic_816453/探索一&#xff1a;正负数问题拿tinyint字段来举例&#xff0c;unsigned后&#xff0c;字段的取值范围是0-255&#xff0c;而signed的范围是-128 - 127。 那么如果我们在明确不需要负值存在的情况下&#…

【HihoCoder - 1881】特殊任务 (树形图,遍历)

题干&#xff1a; H公司一共有N名员工&#xff0c;编号1~N&#xff0c;其中CEO是1号员工。除了CEO之外&#xff0c;其他员工都有唯一的直接上司&#xff0c;所以N名员工上下级关系恰好形成了一棵树形结构。 我们知道每一名员工向H公司的代码库贡献了多少行代码。具体来说&a…

mysql 主从 keepalived_MySQL之双向主从加keepalived高可用

最近在做MySQL数据库的双向主从&#xff0c;了解到keepalived能够自动判断并切换到可用数据库&#xff0c;自己试了一下&#xff0c;整理出文档来。先声明一下环境iptables开启3306端口或者关掉&#xff0c;关闭selinuxMySQL-01&#xff1a;192.168.204.138MySQL-02&#xff1a…

关于vector的size()的使用问题

vector<int> vec; for (int i 0; i < vec.size() - 1; i) &#xff5b; vec[i] &#xff5d; 这里会有个隐藏问题&#xff0c;当vec的size为0时&#xff0c;因为size&#xff08;&#xff09;函数的返回值是无符号整型&#xff0c;这时vec.size() - 1是一个正数…