博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【ZOJ】3209 Treasure Map
阅读量:4552 次
发布时间:2019-06-08

本文共 2703 字,大约阅读时间需要 9 分钟。

1 #include
2 #include
3 #define INF 0x7FFFFFFF 4 #define MAXN 450010 5 using namespace std; 6 int L[MAXN], R[MAXN], U[MAXN], D[MAXN], H[MAXN]; 7 int n, m, p, size, ans, C[MAXN], S[MAXN]; 8 void Init() { 9 int i; 10 n *= m; 11 for (i = 0; i <= n; i++) { 12 S[i] = 0; 13 L[i + 1] = i; 14 R[i] = i + 1; 15 U[i] = D[i] = i; 16 } 17 R[n] = 0; 18 size = n + 1; 19 } 20 void Remove(int c) { 21 int i, j; 22 L[R[c]] = L[c]; 23 R[L[c]] = R[c]; 24 for (i = D[c]; i != c; i = D[i]) { 25 for (j = R[i]; j != i; j = R[j]) { 26 U[D[j]] = U[j]; 27 D[U[j]] = D[j]; 28 S[C[j]]--; 29 } 30 } 31 } 32 void Resume(int c) { 33 int i, j; 34 L[R[c]] = c; 35 R[L[c]] = c; 36 for (i = D[c]; i != c; i = D[i]) { 37 for (j = R[i]; j != i; j = R[j]) { 38 U[D[j]] = j; 39 D[U[j]] = j; 40 S[C[j]]++; 41 } 42 } 43 } 44 inline void Link(int r, int c) { 45 U[size] = c; 46 D[size] = D[c]; 47 U[D[c]] = size; 48 D[c] = size; 49 if (H[r] < 0) 50 H[r] = L[size] = R[size] = size; 51 else { 52 L[size] = H[r]; 53 R[size] = R[H[r]]; 54 L[R[H[r]]] = size; 55 R[H[r]] = size; 56 } 57 S[c]++; 58 C[size++] = c; 59 } 60 void Dance(int now) { 61 if (R[0] == 0) 62 ans = min(ans, now); 63 else { 64 int i, j, c, temp; 65 for (temp = INF,i = R[0]; i; i = R[i]) { 66 if (S[i] < temp) { 67 c = i; 68 temp = S[i]; 69 } 70 } 71 Remove(c); 72 for (i = D[c]; i != c; i = D[i]) { 73 for (j = R[i]; j != i; j = R[j]) 74 Remove(C[j]); 75 Dance(now + 1); 76 for (j = L[i]; j != i; j = L[j]) 77 Resume(C[j]); 78 } 79 Resume(c); 80 } 81 } 82 int main() { 83 int c, i, j, k, x1, y1, x2, y2; 84 scanf("%d", &c); 85 while (c--) { 86 scanf("%d%d%d", &n, &m, &p); 87 Init(); 88 for (i = 1; i <= p; i++) { 89 H[i] = -1; 90 scanf("%d%d%d%d", &x1, &y1, &x2, &y2); 91 for (j = x1 + 1; j <= x2; j++) { 92 for (k = y1 + 1; k <= y2; k++) 93 Link(i, (j - 1) * m + k); 94 } 95 } 96 ans = INF; 97 Dance(0); 98 if (ans != INF) 99 printf("%d\n", ans);100 else101 puts("-1");102 }103 return 0;104 }

转载于:https://www.cnblogs.com/DrunBee/archive/2012/07/23/2604619.html

你可能感兴趣的文章
SQL优化:重新编译存储过程和表
查看>>
PCB“有铅”工艺将何去何从?
查看>>
Solr环境搭建
查看>>
垂直居中的几种实现方法
查看>>
UILabel标签文字过长时的显示方式
查看>>
H5离线缓存机制-manifest
查看>>
比较:I/O成员函数getline() 与 get()(第二种用法)的用法异同
查看>>
201671010118 2016-2017-2《Java程序设计》 第十一周学习心得
查看>>
Get Sauce(状压DP)
查看>>
Office2007 升级到 office2010
查看>>
SpringBoot整合Hibernate
查看>>
PPT1 例2
查看>>
extern外部方法使用C#简单例子
查看>>
血液循环结构
查看>>
SQL Server统计数据库中表个数、视图个数、存储过程个数
查看>>
设计模式:观察者模式
查看>>
课程总结
查看>>
openstack新建虚机、网络、路由时候对应的ovs网桥的变化
查看>>
linux 编译运行c文件
查看>>
Scrapy的学习和使用
查看>>