题目大意:

N个盒子

给你K个以下关系

1.A和B有重叠

2.A在B的左边且不重叠

3.A在B的前边且不重叠

4.A在B的上面且不重叠

显然单独分配X坐标处理2(x1<x2<x1'<x2'),Y坐标处理3(同上),Z坐标处理4(同上)。

1操作怎么处理? X,Y,Z都要处理,A和B 要重叠  必须X,Y,Z都符合夹着的样 (x1<x2'&&x1'<x2)(y,z同理)

所以就是给你很多x1,x2,y1,y2,z1,z2关系 求满足关系的东西,查分约束,或这里直接用拓扑排序

然后对X,Y,Z建图(x1,x2为一组),拓扑。

代码直接COPY了

{

  1. #include <queue>
  2. #include <stdio.h>
  3. #include <string.h>
  4. using namespace std;
  5. #define N 2005
  6.  
  7. struct T
  8. {
  9. int v,next;
  10. }E[3][N*100];
  11.  
  12. struct TT
  13. {
  14. int head,rd,dep;
  15. }V[3][N];
  16.  
  17. int top[3],ans,n,m;
  18.  
  19. void Add_Edge(int k,int u,int v)
  20. {
  21. E[k][top[k]].v = v;
  22. E[k][top[k]].next = V[k][u].head;
  23. V[k][u].head = top[k]++;
  24. ++V[k][v].rd;
  25. }
  26.  
  27. bool Top_Sort(int k)
  28. {
  29. queue<int> Q;
  30. for(int i=1;i<=n;i++)
  31. if(V[k][i].rd == 0)
  32. Q.push(i);
  33. int cnt = 0;
  34. while(!Q.empty())
  35. {
  36. ++cnt;
  37. int p = Q.front();
  38. for(int i=V[k][p].head;i!=NULL;i=E[k][i].next)
  39. {
  40. int q = E[k][i].v;
  41. --V[k][q].rd;
  42. if(V[k][q].rd == 0)
  43. {
  44. Q.push(q);
  45. V[k][q].dep = V[k][p].dep + 1;
  46. }
  47. }
  48. Q.pop();
  49. }
  50. return cnt == n;
  51. }
  52. int main()
  53. {
  54. int u,v,nn,ncase=0;
  55. char cmd;
  56. while(~scanf("%d%d%*c",&nn,&m),nn)
  57. {
  58. memset(V,0,sizeof(V));
  59. top[0] = top[1] = top[2] = 1;
  60. n = 2*nn;
  61. for(int k=0;k<3;k++)
  62. for(int i=1;i<=nn;i++)
  63. Add_Edge(k,i,i+nn);
  64. while(m--)
  65. {
  66. scanf("%c%d%d%*c",&cmd,&u,&v);
  67. if(cmd == 'I')
  68. {
  69. for(int k=0;k<3;k++)
  70. {
  71. Add_Edge(k,u,v+nn);
  72. Add_Edge(k,v,u+nn);
  73. }
  74. }
  75. else
  76. Add_Edge(cmd-'X',u+nn,v);
  77. }
  78. printf("Case %d: ",++ncase);
  79. if(!Top_Sort(0) || !Top_Sort(1) || !Top_Sort(2))
  80. puts("IMPOSSIBLE\n");
  81. else
  82. {
  83. puts("POSSIBLE");
  84. for(int i=1;i<=nn;i++)
  85. printf("%d %d %d %d %d %d\n",V[0][i].dep,V[1][i].dep,V[2][i].dep,V[0][i+nn].dep,V[1][i+nn].dep,V[2][i+nn].dep);
  86. puts("");
  87. }
  88. }
  89. return 0;
  90. }

}

【拓扑排序】【HDU3231】【Box Relations】的更多相关文章

  1. HDU3231 Box Relations——三维拓扑排序

    HDU3231 Box Relations 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3231 题目意思:在一个三维空间上有一些棱和坐标轴平行的立方 ...

  2. hdu 3231 Box Relations (拓扑排序)

    Box Relations Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  3. HDU3231拓扑排序

    Box Relations Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  4. hdu3231 (三重拓扑排序) 2009 Asia Wuhan Regional Contest Hosted by Wuhan University

    这道题算是我拓扑排序入门的收棺题了,卡了我好几天,期间分别犯了超时,内存溢出,理解WA,细节WA,格式WA…… 题目的意思大概是在一个三维坐标系中,有一大堆矩形,这些矩形的每条棱都与坐标轴平行. 这些 ...

  5. 三维拓扑排序好题hdu3231

    /* 三维拓扑排序 将每个长方体分解成六个面,xyz三维进行操作 每一维上的的所有长方体的面都应该服从拓扑关系,即能够完成拓扑排序=如果两个长方体的关系时相交,那么其对应的三对面只要交叉即可 如 a1 ...

  6. 【DFS】【拓扑排序】【动态规划】Gym - 100642A - Babs' Box Boutique

    给你10个箱子,有长宽高,每个箱子你可以决定哪个面朝上摆.把它们摞在一起,边必须平行,上面的不能突出来,问你最多摆几个箱子. 3^10枚举箱子用哪个面.然后按长为第一关键字,宽为第二关键字,从大到小排 ...

  7. 图——拓扑排序(uva10305)

    John has n tasks to do. Unfortunately, the tasks are not independent and the execution of one task i ...

  8. 拓扑排序 POJ2367Genealogical tree[topo-sort]

    ---恢复内容开始--- Genealogical tree Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4875   A ...

  9. ACM/ICPC 之 拓扑排序范例(POJ1094-POJ2585)

    两道拓扑排序问题的范例,用拓扑排序解决的实质是一个单向关系问题 POJ1094(ZOJ1060)-Sortng It All Out 题意简单,但需要考虑的地方很多,因此很容易将code写繁琐了,会给 ...

随机推荐

  1. os x 10.10 測试版系统下载 swift语言学习资料下载

    http://pan.baidu.com/s/1eQ5oj1S               这是下载地址 ! 刚学完oc 就出了 swift!这----  只是还是非常高兴看了一点swith得东西感觉 ...

  2. mysq优化

    MySQL调优可以从几个方面来做:1. 架构层:做从库,实现读写分离: 2.系统层次:增加内存:给磁盘做raid0或者raid5以增加磁盘的读写速度:可以重新挂载磁盘,并加上noatime参数,这样可 ...

  3. andrid中的Sqlite 数据库连接(本地版)

    sqlite简介 SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中.它是D.RichardHipp建立的公有领域项目.它的设计目标是嵌入式的,而且目前 ...

  4. A - 高精度(大数)N次方(第二季水)

    Description Problems involving the computation of exact values of very large magnitude and precision ...

  5. mysql的分页存储过程,能够传出总记录数

    最近用mysql + asp.net来写网站,既然mysql已经支持存储过程了,那么像分页这么常用的东西,当然要用存储过程啦 不过在网上找了一些,发现都有一个特点——就是不能传出总记录数,干脆自己研究 ...

  6. 获取mssqlserver与access数据库插入的当前行的id

    //mssqlserver public static int GetInsertId(string sql) { try { SqlCommand cmd = new SqlCommand(); u ...

  7. js 控制不能输入空格

    onkeydown="if(event.keyCode==32) return false"

  8. [Linux Kernel]查看CentOS版本方法

    查看CentOS版本方法  有以下命令可以查看:   # lsb_release -a LSB Version:    :core-3.1-ia32:core-3.1-noarch:graphics- ...

  9. thinkphp框架开启页面gzip压缩

    Thinkphp下开启gzip压缩很简单,不管你是哪个版本,只要在你的入口文件index.PHP中加入以下两行,如果你的服务器支持,那么就OK了. define ( "GZIP_ENABLE ...

  10. python笔记之Cmd模块

    python笔记之Cmd模块 Cmd类型提供了一个创建命令行解析器的框架,默认情况下,它使用readline来进行交互式操作.命令行编辑和命令完成. 使用cmd创建的命令行解释器循环读取输入的所有行并 ...