题目链接:点击打开链接

题目大意:一个矩形由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)的更多相关文章

  1. 【拓扑排序】【DFS】Painting A Board

    [poj1691]Painting A Board Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3902   Accept ...

  2. POJ 1691 Painting A Board(DFS)

    链接 题意 : 看了好长时间终于看懂题目了,将一个大矩形划分成若干小矩形,告诉你每个小矩形的左上角那个点和右下角那个点的坐标,告诉你这个小矩形要涂的颜色,每个颜色对应一个刷子,问你最少要使用几次刷子. ...

  3. POJ 1691 Painting a Board(状态压缩DP)

    Description The CE digital company has built an Automatic Painting Machine (APM) to paint a flat boa ...

  4. ACM: Gym 100935G Board Game - DFS暴力搜索

    Board Game Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u  Gym 100 ...

  5. POJ 1691 Painting A Board(迭代深搜)

    题目链接 调了一上午,单步的效率太低了,特别是在有递归的情况下...下午来了,输出调试了下,就发现bug了,各种混乱啊. 比较高兴的事,1Y了.本来还准备用edge1优化一下的,结果完全没用到.. # ...

  6. poj1691

    Painting A Board Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3642   Accepted: 1808 ...

  7. DFS & BFS

    DFS 深度优先 BFS 广度优先 DFS或者BFS都是在联通区域内遍历节点的方法 用在二叉树上DFS有preOreder,inOrder,postOrder,BFS就是层次遍历. 在二叉树上的节点, ...

  8. LeetCode529. 扫雷游戏 Python3 DFS+BFS+注释

    https://leetcode-cn.com/problems/minesweeper/solution/python3-dfsbfszhu-shi-by-xxd630/ 规则: 'M' 代表一个未 ...

  9. 搜索(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 ...

随机推荐

  1. 【bzoj3998】[TJOI2015]弦论 后缀自动机+dp

    题目描述 对于一个给定长度为N的字符串,求它的第K小子串是什么. 输入 第一行是一个仅由小写英文字母构成的字符串S 第二行为两个整数T和K,T为0则表示不同位置的相同子串算作一个.T=1则表示不同位置 ...

  2. mysql错误之2014

    error:2014 Commands out of sync; you can't run this command now 这个错误号我也真是醉了. 一直纠结于为什么存储过程执行完,commit操 ...

  3. Canvas与Image互相转换示例以及利用该技术实现微信长按自动识别二维码功能

    现在扫描二维码已经很普遍,微信扫一扫即可,但是如果二维码是在自己的手机上呢?那就要用到微信里的一个功能了,手指长按二维码,会弹出自动识别的选项,点确定就可以看到二维码的内容了.那么怎么通过前端实现这个 ...

  4. mybatis 关联查询时,从表只返回第一条记录解决办法

    如果两表联查,主表和明细表的主键都是id的话,明细表的多条只能查询出来第一条. 造成以上情况可能的原因: 1.级联查询的时候,主表和从表有一样的字段名的时候,在mysql上命令查询是没问题的.但在my ...

  5. *LOJ#2306. 「NOI2017」蔬菜

    $n \leq 100000$种蔬菜,每个蔬菜有:一单位价格:卖第一单位时额外价格:总量:每天腐烂量.每天能卖$m \leq 10$单位蔬菜,多次询问:前$k \leq 100000$天最多收入多少. ...

  6. linux中的vi编辑器(一)

    1.在linux中如果两个用户都在打开一个文件进行编辑,那么文件最后将以最后保存的版本为主. 2.vi仅仅是一个文本编辑器,相当于windows中的记事本,vi的工作模式, 命令模式:在该模式下,在键 ...

  7. [LeetCode] Search Insert Position 二分搜索

    Given a sorted array and a target value, return the index if the target is found. If not, return the ...

  8. 实现多线程sokect

    上一篇文章说到怎样写一个最简单的Java Socket通信,但是在上一篇文章中的例子有一个问题就是Server只能接受一个Client请求,当第一个Client连接后就占据了这个位置,后 续Clien ...

  9. [SaltStack] salt-master启动流程

    SaltStack源码阅读 做salt有一段时间了, 一直没从源码层面去理解, 好吧, 开始读读源码 -_- 那就从salt-master的启动开始吧. 启动salt-master方法: /etc/i ...

  10. tkinter Scale滑块

    鼠标拖动和绑定鼠标滚轮移动: import threading from tkinter import * root = Tk() v = StringVar() s1 = Scale(root,fr ...