codeforces 515d 拓扑排序/二分图

人类肠道微生物群落代谢建模 MICOMWeb 是款用户友好型网站,专为人类肠道微生物群落代谢建模设计。该网站旨在解决基因组尺度代谢模型(in silico)构建过程中的3大限制:① 使用 MICOM Python 包进行通量平衡分析时对用户 Python 编程知识的要求;② 支持预定义和用户自定义饮食,以生成专属代谢模型;③ 处理宏基因组鸟枪法测序或 16S 扩增子测序获得的真实丰度数据时,所需的高通量计算基础设施。本文展示了 MICOMWeb 的核心功能,用户可轻松开展虚拟实验,为3个已发表数据集的实验验证生成功能性假设。 阅读详情
D. Drazil and Tiles
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

Drazil created a following problem about putting 1 × 2 tiles into an n × m grid:

"There is a grid with some cells that are empty and some cells that are occupied. You should use 1 × 2 tiles to cover all empty cells and no two tiles should cover each other. And you should print a solution about how to do it."

But Drazil doesn't like to write special checking program for this task. His friend, Varda advised him: "how about asking contestant only to print the solution when it exists and it is unique? Otherwise contestant may print 'Not unique' ".

Drazil found that the constraints for this task may be much larger than for the original task!

Can you solve this new problem?

Note that you should print 'Not unique' either when there exists no solution or when there exists several different solutions for the original task.

Input

The first line contains two integers n and m (1 ≤ n, m ≤ 2000).

The following n lines describe the grid rows. Character '.' denotes an empty cell, and the character '*' denotes a cell that is occupied.

Output

If there is no solution or the solution is not unique, you should print the string "Not unique".

Otherwise you should print how to cover all empty cells with 1 × 2 tiles. Use characters "<>" to denote horizontal tiles and characters "^v" to denote vertical tiles. Refer to the sample test for the output format example.

Sample test(s)
input
3 3
...
.*.
...
output
Not unique
input
4 4
..**
*...
*.**
....
output
<>**
*^<>
*v**
<><>
input
2 4
*..*
....
output
*<>*
<><>
input
1 1
.
output
Not unique
input
1 1
*
output
*
Note

In the first case, there are indeed two solutions:

<>^
^*v
v<>

and

^<>
v*^
<>v

so the answer is "Not unique".



题目给出一个n*m的网格,用1*2的砖块将上面的空地都铺满,输出方案是否唯一,若唯一输出解决方案。

把所有的格子当成点,相邻格子间连接一条边,并统计每个格子的度数。将所有度数为1的点放入队列中,度数为1的一定只有一种铺法。铺完更新周围的点的度数,将度数为1的入队,循环直到队列为空。如果此时还没铺满,则方案不唯一。

如果铺完度数为1的,那么剩下的点都是度数>=2,所有的边构成了一个二分图,并且一定存在一个环其中相邻的边可以染成不同颜色。所以如果有解则一定有>=2个解


#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>

using namespace std;

#define maxn 2005

int n,m;
char g[maxn][maxn];
int d[maxn][maxn];
int dir[4][2] = {{-1,0},{1,0},{0,1},{0,-1}};

int main()
{
    while(scanf("%d%d", &n, &m)!=EOF){
        for(int i = 1; i <= n; i++)
            scanf("%s", g[i]+1);

        memset(d, 0, sizeof(d));
        int tot = 0;

        queue<int> q;
        for(int i = 1; i<= n;i++)
        for(int j =1; j<= m; j++){
            int nx,ny;
            if(g[i][j] != '.') continue;
            tot++;
            for(int k = 0; k < 4; k++){
                nx = i+dir[k][0], ny = j+dir[k][1];
                if(g[nx][ny] == '.')
                    d[i][j]++;
            }
            if(d[i][j] == 1)
                q.push(i*(m+1)+j);
        }

        int cnt = 0;
        while(!q.empty()){
            int x = q.front()/(m+1), y = q.front()%(m+1);
            q.pop();

            for(int i = 0; i < 4; i++){
                int nx = dir[i][0]+x, ny = dir[i][1]+y;
                if(g[nx][ny] != '.') continue;
                if(i == 0){
                    g[nx][ny] = '^';
                    g[x][y] = 'v';
                }
                else if(i == 1){
                    g[nx][ny] = 'v';
                    g[x][y] = '^';
                }
                else if(i == 2){
                    g[nx][ny] = '>';
                    g[x][y] = '<';
                }
                else{
                    g[nx][ny] = '<';
                    g[x][y] = '>';
                }

                cnt+=2;
                for(int k = 0; k < 4; k++){
                int nnx = nx+dir[k][0], nny = ny+dir[k][1];
                if(g[nnx][nny]!='.') continue;
                d[nnx][nny]--;
                if(d[nnx][nny] == 1)
                    q.push(nnx*(m+1)+nny);
                }

            }
        }

        if(cnt!=tot)
            printf("Not unique\n");
        else{
            for(int i = 1; i <= n; i++){
                for(int j = 1; j <= m; j++)
                    printf("%c", g[i][j]);
                printf("\n");
            }
        }

    }
    return 0;
}


TikTok滑块验证码verifyV2逆向实战:从fp生成到captchabody加密的完整流程解析 本文详细解析了TikTok滑块验证码verifyV2的逆向工程全流程,从fp参数生成到captchabody加密机制,涵盖了验证码触发、WASM解密、轨迹模拟等关键技术点。通过实战案例和代码示例,帮助开发者深入理解反爬机制,提升逆向工程能力,应对复杂的验证挑战。 阅读详情

相关推荐

PID调参避坑指南:为什么你的电机总是震荡?从比例带积分到微分实战解析

本文针对电机控制中常见的震荡问题,提供了一份PID调参实战指南。文章深入解析了比例(P)、积分(I)、微分(D)三个参数对系统稳定性的影响,揭示了比例增益过大是导致震荡的关键原因之一,并给出了从纯比例调试到引入积分、微分的系统化调参流程与避坑要点,帮助工程师快速实现电机平稳、精准的控制。

weixin_28223453的博客 456

Drazil and Tiles CodeForces - 515D(思维+拓扑排序)这题强

题目链接 div2 的D题,比较好的一道拓扑排序了,一开始也没有发现咋用拓扑排序做。。 题意:铺砖,砖的大小为1 X 2. 然后要求你在给定的区域内为.的填充上砖,左右填充&lt;&gt;,上下填充^v; 题意分析: 1.这道题可以用拓扑排序做,可以遍历个点,找出其周围‘.’的个数。 2.如果周围'.'点的个数为1则必须对其进行安排。 3.不断拓扑遍历,直到结束,如果还有.则方法不为1...

fighting_yifeng的博客 319

零成本实现飞牛 OS 内网穿透:CloudFlare 隧道搭建全攻略

一、引言:突破内网限制的最优解当你的内网环境中部署了飞牛 OS 系统(无论是老旧电脑还是 NAS 设备),想要实现公网访问时,传统方案往往面临两大痛点:公网 IP 申请困难且成本高DDNS 动态解析配置复杂专业内网穿透工具存在付费门槛今天为大家带来零成本解决方案:通过免费域名搭配 CloudFlare 隧道技术,无需公网 IP 即可轻松实现飞牛 OS 服务的公网访问。全程操作可视化,新手也能快速上手!二、前期准备:必备工具清单(1)域名准备。

Honmaple的博客 7491

CODEFORCES 515D Drazil and Tiles <路径dfs + 跳格>

题目:http://codeforces.com/problemset/problem/515/D 题意:给你一张方格,叫你用1X2填充方格,有些方格已经被占了(用‘*’),没被占的('.')。竖起来填,用 "^v"表示,横起来,用”Not unique". 分析:dfs一下,一对一对地找。 Input 3 3....*.... Output Not unique

论菜鸟的自我修养。。。 470

思科路由器重分发(静态路由+OSPF动态路由+RIP动态路由)

思科路由器重分发(静态路由+OSPF动态路由+RIP动态路由)

2301_81256766的博客 1257

无刷电机FOC控制入门:磁场、洛伦兹力与坐标转换详解

本文深入解析无刷电机FOC(磁场定向控制)的核心原理,从电磁学基础的磁场与洛伦兹力出发,详细阐述了如何通过Clarke变换、Park变换等坐标转换技术,将三相交流解耦为直流量进行控制,最终利用SVPWM技术实现平滑、高效的电机驱动。文章旨在帮助开发者理解FOC的物理本质与数学框架,为机器人、无人机等高性能应用奠定基础。

weixin_29306011的博客 267

Codeforces 515D - Drazil and Tiles (拓扑排序)

RT

一只冰熊 963

python控制caxa模块_CAXA二次开发实用手册.doc

您所在位置:网站首页 > 海量文档&nbsp>&nbsp汽车/机械/制造&nbsp>&nbsp机械软件CAXA二次开发实用手册.doc119页本文档一共被下载:次,您可全文免费在线阅读后下载本文档。 下载提示1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。2.该文档所得收...

weixin_39990819的博客 1760

HDU_6073 Matching In Multiplication 【二分图&&拓扑排序&&DFS】

题目链接 题目描述如果图中点可以被分为两组,并且使得所有边都跨越组的边界,则这就是一个二分图。准确地说:把一个图的顶点划分为两个不相交集 U 和V ,使得每一条边都分别连接U、V中的顶点。如果存在这样的划分,则此图为一个二分图。二分图的一个等价定义是:不含有「含奇数条边的环」的图完美匹配:如果一个图的某个匹配中,所有的顶点都是匹配点,那么它就是一个完美匹配。但是小Q错误的理解了二分图的定义,以为二分

Learning Deep Learning 396

RK3568移植AP6256

本文主要是记录RK3568移植正基的AP6256的WIFIBT模块,感兴趣的朋友可以一起学习!!!提示:以下是本篇文章正文内容,下面案例可供参考。

qq_24093081的博客 3715

dolphinscheduler-3.4.0

dolphinscheduler集群部署

docsz的博客 660

Codeforces Round #532 (Div. 2) E. Andrew and Taxi(二分+拓扑排序)

题目链接 题意 给你一个图1-n标号,m条有向边。 每条有向边有一个权值,代表翻转其方向所需代价。 求使得图变成无环图,翻转边权的最大值最小。 思路 二分答案,判断权值大于答案的边集是否能成环,如果不能说明答案可以再小点,否则答案可以大点。 关键是翻转哪些边比较难想,第一次感受到拓扑排序,排序二字用处。 按拓扑排序的顺序,给每个点从小到大赋权,最后判断如果起点权值大于终点权值则需要翻转。画个图就明...

←_← 1297

基于STM32L4XX、HAL库的MAX13487EESA RS485总线收发器驱动程序设计

MAX13487EESA是一款3.3V供电的RS-485/RS-422收发器,由Maxim Integrated生产。PA4 (控制引脚) ---> /RE, DE (连接在一起)具有±15kV ESD保护的驱动器输出和接收器输入。半双工RS-485/RS-422通信。工业温度范围:-40°C至+85°C。工作电压范围:3.0V至3.6V。数据速率高达250kbps。

zhusl6688的博客 685

HDU - 5438 - Ponds (拓扑排序)

题意: 删除入度为一或零的所有池塘,最后求所有联通快内点的数量是奇数的value和。 #include &lt;bits/stdc++.h&gt; using namespace std; typedef long long ll; const int maxn = 1e4 +100; int vis[maxn],degree[maxn];//是否访问,以及该点的入度 int val[max...

刘二狗的博客 274

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【CF 515D】 Drazil and Tiles

【CF 515D】 Drazil and Tiles 拓扑的思想 如果满足条件 ‘.’未遍历完之前肯定存在度为1的点(上下左右仅有一个’.’)遍历到一个1度点u时 将与他连的点v用对应括号括起 此时v也已匹配 入度归零 同时将与v相连的其余点入度减1 不断遍历知道遍历完所有’.’ 若能遍历完 则满足条件否则无解或多解 (吐槽一下 原本用的纯粹拓扑思路 想想也是绝对要T的。。后来改换BFS代码如下:

ACMer' 1074

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

[Codeforces515D]Drazil and Tiles(构造)

我和谁都不争,和谁争我都不屑。

zyf2000 1028

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【Codeforces Round #532 (Div. 2) E. Mahmoud and a xor trip】 二分+拓扑排序

E. Andrew and Taxi 题意 给你一个有边权的有向图,反转一条边的代价是这条边的边权,反转多个边的代价是所有反转边里面边权最大的那条边的边权,问让这个图不存在环的最小代价,以及被反转的边的编号。 做法 首先求最小代价,我们只需要二分这个代价,check就是看删除所有小于这个代价的边之后是否有环。 输出边集,要用到拓扑排序的一个性质 一个图进行拓扑排序后,对于每一个有向边u-&amp;amp;gt;...

lajiyuan的博客 586

Drazil and Tiles CodeForces - 515D

Drazil created a following problem about putting 1 × 2 tiles into an n × m grid: "There is a grid with some cells that are empty and some cells that are occupied. You should use 1 × 2 tiles to cover ...

dsaghjkye的博客 260

CodeForces 825E Educational #25 E:拓扑排序+优先队列

题意:给出一个图,有N(v表示v的权值要大于u的,这样n个点赋值完成后,形成一个n的全排列。要求所有合法的全排列中字典序最小的一个。 题解:我们手上有若干联通快,每个联通快要满足一定的内在大小关系,拿出一个联通快单独看,肯定不会出现环路,因为这样必然形成大于关系的矛盾,那么必然存在一些点出度=0,而这些点就是这个联通快里边的“极大值点”(说法并不是很准确,意会即可),那么我们首先可以通过判断出度

辣鸡葫芦娃 591

【python数据结构】二分图、拓扑排序、并查集

1.判断是否为二分图【leetcode785】 如果可以用两种颜色对图中的节点进行着色,并且保证相邻的节点颜色不同,那么这个图就是二分图。 class Solution: def isBipartite(self, graph: List[List[int]]) -> bool: color = {} for node in range(len(graph)): if node not in color:

original_recipe的博客 445

D. Drazil and Tiles (CF 515D bfs搜索)

题意:n*m的图,‘.’表示空格,现在要用1*2的砖去把它填满,可以横向(‘<’,'>')填和竖向('^','v')填。找出基本元素块,(i,j)和它相邻的四个点看成一个基本元素块,如果(i,j)周围的‘.’只有一个那么这个(i,j)处的填法就是固定的,填完(i,j)后看它周围是否有其他点因为填完(i,j)后填法变的唯一,有就入队, 就这样一步一步找到固定填法的(i,j),更新周围的点。

@you! 775

二 图 之 拓扑排序算法、关键路径

1、拓扑排序---主要解决一个工程能否顺序进行  拓扑排序的意义? 举个例子先:一个软件专业的学生学习一系列的课程,其中一些课程必须再学完它的基础的先修课程才能开始。如:在《程序设计基础》和《离散数学》学完之前就不能开始学习《数据结构》。这些先决条件定义了课程之间的领先(优先)关系。这个关系可以用有向图更清楚地表示。图中顶点表示课程,有向边表示先决条件。若课程i是课程j的先决条件,

jyh的博客 772

Codeforces Round #292 (Div. 2) -- D. Drazil and Tiles (拓扑排序)

D. Drazil and Tiles time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Drazil created a following problem abou

Never say never 1486

Codeforces-1100E:Andrew and Taxi(二分+拓扑排序)

E. Andrew and Taxi time limit per test 2 seconds memory limit per test 256 megabytes inputstandard input outputstandard output Andrew prefers taxi to other means of transport, but recently most taxi d...

Mitsuha_的博客 1239

Llama3-8B LoRA微调模型评估与部署全流程

LoRA(Low-Rank Adaptation)是一种高效的大语言模型微调技术,通过低秩矩阵分解实现参数高效更新。其核心原理是在原始模型参数旁添加可训练的适配层,大幅降低训练和存储开销。在自然语言处理领域,LoRA技术显著提升了模型微调的效率,特别适用于多任务学习和快速迭代场景。以Llama3-8B模型为例,LoRA微调后仅需保存300MB的适配器参数,相比全参数微调节省98%存储空间。实际部署时,可通过vLLM或TensorRT-LLM等推理引擎优化性能,结合量化技术如8-bit和4-bit压缩,在A1

dielucuan8830的博客 475

Drazil and Tiles - CODEFORCES 515D 贪心

Drazil created a following problem about putting 1 × 2 tiles into an n × m grid: "There is a grid with some cells that are empty and some cells that are occupied. You should use 1 × 2 tiles to cover

呼,是出一口气;吸,是争一口气! 886
上一篇: zoj 3686 树转化为数组表示,线段树区间更新
下一篇: codforeces 527D 贪心
HuanTongH
博客等级 码龄12年 7粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值