题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3231

题意:有n个长方体,四种限制条件。(1)I x y x和y有相交;(2)X/Y/Z  x y x的最大X/Y/Z坐标小于y的最大X/Y/Z。构造出这样的n个长方体。

思路:首先,XYZ三个方向是可以分开考 虑的。那么我们可以一个个分别求解。将每个长方体拆成左上角右下角两个点,我们假设现在考虑X方向,也即是一个长方体对应两个X方向的点,共2*n个点, 边<i,j>表示i小于j,那么首先有边<i,i+n>,即同一个长方体的左下角的点的x坐标必然小于其右上角的x坐标。对于相 交的x和y有<x,y+n> <y,x+n>,对于不相交的有<x+n,y>。然后就是判断是不是拓扑图就行了。是的话依次按照0,1,2开始标号。

vector<int> g[3][N];
int d[3][N],ans[3][N],n,m;

void Add(int i,int u,int v)
{
    g[i][u].pb(v);
    d[i][v]++;
}

void build()
{
    int i,j,x,y;
    FOR0(i,3) FOR0(j,N) g[i][j].clear(),d[i][j]=0;
    char op[5];
    FOR0(i,3) FOR1(j,n) Add(i,j,j+n);
    while(m--)
    {
        RD(op); RD(x,y);
        if(op[0]=='I')
        {
            FOR0(i,3) Add(i,x,y+n),Add(i,y,x+n);
        }
        else Add(op[0]-'X',x+n,y);
    }
}

int top_sort(int t)
{
    int cnt=0;
    queue<int> Q;
    int i,j,u;
    FOR1(i,n+n) if(!d[t][i]) ans[t][i]=cnt++,Q.push(i);
    while(!Q.empty())
    {
        j=Q.front();
        Q.pop();
        FOR0(i,SZ(g[t][j]))
        {
            u=g[t][j][i];
            if(--d[t][u]==0) Q.push(u),ans[t][u]=cnt++;
        }
    }
    return cnt==n+n;
}

void deal()
{
    int i;
    FOR0(i,3) if(!top_sort(i))
    {
        puts("IMPOSSIBLE");
        return;
    }
    puts("POSSIBLE");
    FOR1(i,n) printf("%d %d %d %d %d %d\n",ans[0][i],ans[1][i],ans[2][i],ans[0][i+n],ans[1][i+n],ans[2][i+n]);
}

int main()
{
    int num=0;
    Rush(n)
    {
        RD(m);
        if(!n&&!m) break;
        build();
        printf("Case %d: ",++num);
        deal(); puts("");
    }
}

HDU 3213 Box Relations(拓扑排序构造)的更多相关文章

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

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

  2. 题解报告:hdu 2647 Reward(拓扑排序)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2647 Problem Description Dandelion's uncle is a boss ...

  3. hdu 5098 双队列拓扑排序

    http://acm.hdu.edu.cn/showproblem.php?pid=5098 软件在安装之后需要重启才能发挥作用,现在给你一堆软件(有的需要重启有的不需要)以及安装这个软件之前需要哪些 ...

  4. HDU 5811 Colosseo(拓扑排序+单调DP)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5811 [题目大意] 给出 一张单向图,现在将其划分成了两个部分,问划分之后的点是否分别满足按照一定 ...

  5. 洛谷P1073 Tarjan + 拓扑排序 // 构造分层图

    https://www.luogu.org/problemnew/show/P1073 C国有 n n个大城市和 mm 条道路,每条道路连接这 nn个城市中的某两个城市.任意两个城市之间最多只有一条道 ...

  6. HDU 2647 Reward(拓扑排序+判断环+分层)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2647 题目大意:要给n个人发工资,告诉你m个关系,给出m行每行a b,表示b的工资小于a的工资,最低工 ...

  7. LA-4255 Guess (拓扑排序+构造)

    题目大意:一个未知的整数序列,给出其任意一个区间和的正负,还原这个序列.任意一个满足条件的序列即可. 题目分析:将连续区间和转化为前缀和之差,sumx-1与sumy的大小关系已知,以此建立一条有向边, ...

  8. HDU 4857 (反向拓扑排序 + 优先队列)

    题意:有N个人,M个优先级a,b表示a优先于b.而且每一个人有个编号的优先级.输出顺序. 思路来自:与PKU3687一样 在主要的拓扑排序的基础上又添加了一个要求:编号最小的节点要尽量排在前面:在满足 ...

  9. HDU 4857 逃生(拓扑排序)

    拓扑排序 一.定义 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若<u,v> ∈ ...

随机推荐

  1. Android 多线程通信 访问网络

    package org.rongguang.testthread; import android.app.Activity; import android.os.Bundle; import andr ...

  2. ADB server didn't ACK的解决方法

    异常信息如下: C:\Users\Administrator>adb devices* daemon not running. starting it now on port 5037 *ADB ...

  3. 【python cookbook】【字符串与文本】7.定义实现最短匹配的正则表达式

    问题:使用正则表达式对文本模式匹配,将识别出来的最长的可能匹配修改为找出最短的可能匹配 解决方法:在匹配模式中的*操作符后加上?修饰符 import re # Sample text text = ' ...

  4. eclipse折叠快捷键

    之前按代码折叠快捷键的时候发现时而灵时而不灵,今天突然发现了问题所在: 按ctrl+/(小键盘)使代码左边出现折叠标志 然后再按ctrl+shift+/(折叠)   , ctrl+shift+*(展开 ...

  5. 理解Linux中断 (2)【转】

    转自:http://blog.csdn.net/tommy_wxie/article/details/7425692 版权声明:本文为博主原创文章,未经博主允许不得转载. .内核的中断处理 3.1.中 ...

  6. ARM多核处理器启动过程分析【转】

    转自:http://blog.csdn.net/qianlong4526888/article/details/27695173 版权声明:本文为博主原创文章,未经博主允许不得转载. 说明: 该流程图 ...

  7. android 系统相册调用,各版本的区别总结

    请求系统相册有三个Action: (注意以下  图库(缩略图)   和  图片(原图)  的区别) ACTION_OPEN_DOCUMENT    仅限4.4或以上使用  默认打开原图 ACTION_ ...

  8. JavaScript脚本语言基础(二)

    导读: JavaScript条件语句 JavaScript循环语句 JavaScript网页中错误捕获 JavaScript的Break和Continue命令 JavaScript的转义字符 1.Ja ...

  9. 对js原型的理解

    1.值类型和引用类型,引用类型都是对象,通过typeof()测试类型,instanceof测试是否是对象.对象是属性的集合. 2.对象都是由函数创建的,函数又是一个对象. 3.函数有一个默认的属性,叫 ...

  10. 使用django的ImageField和from制作上传图片页面

    需求描述: 做一个简单的注册页面,使得用户在注册页上传头像. 解决办法: 以前用java写这个的时候,在action上面需要用IO接受文件,然后生成一个文件名,再将文件相对路径保存到user表的img ...