poj1691--Painting A Board(拓扑+dfs)
题目链接:点击打开链接
题目大意:一个矩形由n个小矩形组成,如今要给小矩形染色,可是颜料会向下滑,为了防止弄乱颜料,所以要先染上面的矩形,后然染以下的矩形。每一次改变颜色都要用一个新的刷子。问最小用多少刷子。
依照染色的条件。能够找到一个拓扑序列,拓扑序列中前面的要先染。后面的要后染,按拓扑的顺序dfs找出最少的刷字数。
#include <cstdio>
#include <cstring>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std ;
struct node{
int y1 , x1 , y2 , x2 , c ;
}p[20];
vector <int> vec[20] ;
int sta[20] , k ;
int in[20] , min1 , n ;
int vis[20] ;
int cmp(node a,node b) {
return a.y1 < b.y1 ;
}
void dfs(int c,int num,int ans) {
if( ans > min1 ) {
return ;
}
if( num == n ) {
min1 = ans ;
return ;
}
int i , j , l ;
for(i = 0 ; i < n ; i++) {
if( vis[i] || in[i] ) continue ;
if( p[i].c == c ) {
vis[i] = 1 ;
l = vec[i].size() ;
for(j = 0 ; j < l ; j++)
in[ vec[i][j] ]-- ;
sta[k++] = i ;
dfs(c,num+1,ans) ;
k-- ;
vis[i] = 0 ;
for(j = 0 ; j < l ; j++)
in[ vec[i][j] ]++ ;
}
else {
vis[i] = 1 ;
l = vec[i].size() ;
for(j = 0 ; j < l ; j++)
in[ vec[i][j] ]-- ;
sta[k++] = i ;
dfs(p[i].c,num+1,ans+1) ;
k-- ;
vis[i] = 0 ;
for(j = 0 ; j < l ; j++)
in[ vec[i][j] ]++ ;
}
}
}
int main() {
int t , i , j ;
scanf("%d", &t) ;
while( t-- ) {
scanf("%d", &n) ;
memset(in,0,sizeof(in)) ;
memset(vis,0,sizeof(vis)) ;
for(i = 0 ; i < n ; i++) vec[i].clear() ;
for(i = 0 ; i < n ; i++) {
scanf("%d %d %d %d %d", &p[i].y1, &p[i].x1, &p[i].y2, &p[i].x2, &p[i].c) ;
}
sort(p,p+n,cmp) ;
for(i = 0 ; i < n ; i++) {
for(j = i+1 ; j < n ; j++) {
if( p[i].y2 == p[j].y1 && !( p[j].x2 <= p[i].x1 || p[j].x1 >= p[i].x2 ) ) {
vec[i].push_back(j) ;
in[j]++ ;
}
}
}
min1 = 100 ;
for(i = 0 ; i < n ; i++) {
if( p[i].y1 ) break ;
dfs(p[i].c,0,0) ;
}
printf("%d\n", min1+1) ;
}
return 0 ;
}
poj1691--Painting A Board(拓扑+dfs)的更多相关文章
- 【拓扑排序】【DFS】Painting A Board
[poj1691]Painting A Board Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 3902 Accept ...
- POJ 1691 Painting A Board(DFS)
链接 题意 : 看了好长时间终于看懂题目了,将一个大矩形划分成若干小矩形,告诉你每个小矩形的左上角那个点和右下角那个点的坐标,告诉你这个小矩形要涂的颜色,每个颜色对应一个刷子,问你最少要使用几次刷子. ...
- POJ 1691 Painting a Board(状态压缩DP)
Description The CE digital company has built an Automatic Painting Machine (APM) to paint a flat boa ...
- ACM: Gym 100935G Board Game - DFS暴力搜索
Board Game Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Gym 100 ...
- POJ 1691 Painting A Board(迭代深搜)
题目链接 调了一上午,单步的效率太低了,特别是在有递归的情况下...下午来了,输出调试了下,就发现bug了,各种混乱啊. 比较高兴的事,1Y了.本来还准备用edge1优化一下的,结果完全没用到.. # ...
- poj1691
Painting A Board Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 3642 Accepted: 1808 ...
- DFS & BFS
DFS 深度优先 BFS 广度优先 DFS或者BFS都是在联通区域内遍历节点的方法 用在二叉树上DFS有preOreder,inOrder,postOrder,BFS就是层次遍历. 在二叉树上的节点, ...
- LeetCode529. 扫雷游戏 Python3 DFS+BFS+注释
https://leetcode-cn.com/problems/minesweeper/solution/python3-dfsbfszhu-shi-by-xxd630/ 规则: 'M' 代表一个未 ...
- 搜索(DFS)---填充封闭区域
填充封闭区域 130. Surrounded Regions (Medium) For example, X X X X X O O X X X O X X O X X After running y ...
随机推荐
- 【bzoj4439】[Swerc2015]Landscaping 网络流最小割
题目描述 FJ有一块N*M的矩形田地,有两种地形高地(用‘#’表示)和低地(用‘.’表示) FJ需要对每一行田地从左到右完整开收割机走到头,再对每一列从上到下完整走到头,如下图所示 对于一个4*4的田 ...
- httpClient get方式抓取数据
/* * 爬取网页信息 */ private static String pickData(String url) { CloseableHttpClient ht ...
- POJ 3155 Hard Life(最大密度子图+改进算法)
Hard Life Time Limit: 8000MS Memory Limit: 65536K Total Submissions: 9012 Accepted: 2614 Case Ti ...
- 洛谷P1816 忠诚
P1816 忠诚 569通过 1.5K提交 题目提供者该用户不存在 标签云端 难度普及+/提高 时空限制1s / 128MB 提交 讨论 题解 最新讨论更多讨论 主席树的常数貌似大于线段树… TL ...
- IDEA 注册问题,创建 和 删除项目
目录 .....2016.3/2017.1 IDEA 注册码 .....IDEA 创建项目 .....IDEA 删除项目 IDEA 注册码 复制使用别人的注册码,启动选择如下: 复制粘贴如下代码: 这 ...
- 后缀数组基本问题QAQ
以下题目均来自罗穗骞的论文... No.1最长公共前缀 最长公共前缀: 题目: 给定一个字符串,询问某两个后缀的最长公共前缀. 分析: 某两个后缀的最长公共前缀就是区间height最小值,转化为RMQ ...
- 洛谷P2168 荷马史诗 [NOI2015]
题目描述 追逐影子的人,自己就是影子 ——荷马 Allison 最近迷上了文学.她喜欢在一个慵懒的午后,细细地品上一杯卡布奇诺,静静地阅读她爱不释手的<荷马史诗>.但是由<奥德赛&g ...
- POJ 2635 The Embarrassed Cryptographer (千进制,素数筛,同余定理)
The Embarrassed Cryptographer Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 15767 A ...
- 时间戳/Date(1354116249000)/ 转换
从C#的Datatime格式通过Json传到Js里面,时间会显示成时间戳/Date(1354116249000)/ ,js转化如下 function GetDateFormat(str) { retu ...
- php --图片加图片水印
最近在做一个视频网站需要视频有一个封面图片,但是不能是普通的图片,能让别人一眼看出来是 视频,所以我就在图片上面加了视频播放器的那种水印,具体代码如下: <?php/** * 图片加水印(适用于 ...