HDU 3231 Box Relations
题目大意: 给定一些正方体的关系,要求一组符合这些关系的正方体坐标,如果不存在符合条件的正方体坐标,IMPOSSIBLE。(Special Judge)
实力还是太弱了,完全不会……
#include <cstdio>
#include <stdlib>
#include <iostream>
#define MAXN 2010
#define MAXR 500000
#define MAX 999999 typedef struct edges{
int v,w,next;
}edge; int N, R;
edge edge_X[MAXR], edge_Y[MAXR], edge_Z[MAXR];
int s_X[MAXN], s_Y[MAXN], s_Z[MAXN];
int index_X[MAXN], index_Y[MAXN], index_Z[MAXN];
int degree_X[MAXN], degree_Y[MAXN], degree_Z[MAXN]; void Add(struct edges e[], int start, int end, int index[], int degree[], int &tot){
e[tot].v = end;
e[tot].next = index[start];
index[start] = tot++;
degree[end]++;
} bool init(){
int i, totx, toty, totz;
scanf("%d%d", &N, &R);
if (N == 0 && R == 0) return false;
memset(index_X, 255, sizeof(*index_X)*MAXN); //-1 indicates end of link
memset(index_Y, 255, sizeof(*index_Y)*MAXN);
memset(index_Z, 255, sizeof(*index_Z)*MAXN);
memset(degree_X, 0, sizeof(*degree_X)*MAXN);
memset(degree_Y, 0, sizeof(*degree_Y)*MAXN);
memset(degree_Z, 0, sizeof(*degree_Z)*MAXN);
totx = toty = totz = 0; for (i=1; i<=N; i++){
// node 0是超级汇点,最大的点。值为0
Add(edge_X, 0, i, index_X, degree_X, totx); //x1 of n-th Cube
Add(edge_Y, 0, i, index_Y, degree_Y, toty);
Add(edge_Z, 0, i, index_Z, degree_Z, totz);
Add(edge_X, i, i+N, index_X, degree_X, totx);
Add(edge_Y, i, i+N, index_Y, degree_Y, toty);
Add(edge_Z, i, i+N, index_Z, degree_Z, totz);
}
for (i=1; i<=R; i++){
char t[10];
int A, B;
scanf("%s%d%d", t, &A, &B);
if (t[0] == 'I'){
Add(edge_X, A, B+N, index_X, degree_X, totx); //x1(A) < x1(B)
Add(edge_X, B, A+N, index_X, degree_X, totx); //x2(A) > x1(B) or x1(B) < x2(A)
Add(edge_Y, A, B+N, index_Y, degree_Y, toty);
Add(edge_Y, B, A+N, index_Y, degree_Y, toty);
Add(edge_Z, A, B+N, index_Z, degree_Z, totz);
Add(edge_Z, B, A+N, index_Z, degree_Z, totz);
}
if (t[0] == 'X')
Add(edge_X, A+N, B, index_X, degree_X, totx); //x2(A) < x1(B)
if (t[0] == 'Y')
Add(edge_Y, A+N, B, index_Y, degree_Y, toty); //y2(A) < y1(B)
if (t[0] == 'Z')
Add(edge_Z, A+N, B, index_Z, degree_Z, totz); //z2(A) < z1(B)
}
return true;
} bool NonPreFirstTopSort(edge e[], int index[], int degree[], int n, int s[]){
int i, count(0), head(0), tail(1);
int Q[MAXN]; Q[0] = 0; while (head != tail){
s[Q[head]] = count++;
i = index[Q[head]];
while (i != -1){
if (--degree[e[i].v] == 0) Q[tail++] = e[i].v;
i = e[i].next;
}
++head;
} if (count < n) return false;
else return true;
} int main(){
int Cases = 0, i;
while (init() && ++Cases){
bool flag;
flag = NonPreFirstTopSort(edge_X, index_X, degree_X, N*2 + 1, s_X);
if (flag) flag = NonPreFirstTopSort(edge_Y, index_Y, degree_Y, N*2 + 1, s_Y);
if (flag) flag = NonPreFirstTopSort(edge_Z, index_Z, degree_Z, N*2 + 1, s_Z);
if (flag){
printf("Case %d: POSSIBLE\n", Cases);
for (i=1; i<=N; i++)
printf("%d %d %d %d %d %d\n", s_X[i], s_Y[i], s_Z[i], s_X[i+N], s_Y[i+N], s_Z[i+N]);
printf("\n"); }
else
printf("Case %d: IMPOSSIBLE\n\n", Cases);
}
//system("pause");
return 0;
}
HDU 3231 Box Relations的更多相关文章
- hdu 3231 Box Relations (拓扑排序)
Box Relations Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- HDU 3213 Box Relations(拓扑排序构造)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3231 题意:有n个长方体,四种限制条件.(1)I x y x和y有相交:(2)X/Y/Z x y x ...
- HDU3231 Box Relations——三维拓扑排序
HDU3231 Box Relations 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3231 题目意思:在一个三维空间上有一些棱和坐标轴平行的立方 ...
- HDU 2475 BOX 动态树 Link-Cut Tree
Box Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) [Problem De ...
- HDU 2088 Box of Bricks
http://acm.hdu.edu.cn/showproblem.php?pid=2088 Problem Description Little Bob likes playing with his ...
- HDU 2088 Box of Bricks(脑洞)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2088 Box of Bricks Time Limit: 1000/1000 MS (Java/Oth ...
- HDU 2475 Box
Box Time Limit: 5000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID: 247564 ...
- 『嗨威说』算法设计与分析 - 贪心算法思想小结(HDU 2088 Box of Bricks)
本文索引目录: 一.贪心算法的基本思想以及个人理解 二.汽车加油问题的贪心选择性质 三.一道贪心算法题点拨升华贪心思想 四.结对编程情况 一.贪心算法的基本思想以及个人理解: 1.1 基本概念: 首先 ...
- HDU 1326 Box of Bricks(水~平均高度求最少移动砖)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1326 题目大意: 给n堵墙,每个墙的高度不同,求最少移动多少块转使得墙的的高度相同. 解题思路: 找到 ...
随机推荐
- C# XML与Json之间相互转换
XML转换为Json字符串 在代码中预定义的一个xml字符串,如下: string xml = @"<?xml version=""1.0"" ...
- js判断微信内置浏览器
做了一个h5页面来下载app,但如果页面是用微信扫一扫打开的,点击下载按钮下载不了app,原因是微信内置浏览器屏蔽了下载链接.所以增加了检测,如果用户是用微信浏览器打开的,则提示用户使用浏览器打开.那 ...
- Cocos2dx游戏开发系列笔记13:一个横版拳击游戏Demo完结篇
懒骨头(http://blog.csdn.net/iamlazybone QQ:124774397 ) 写下这些东西的同时 旁边放了两部电影 周星驰的<还魂夜> 甄子丹的<特殊身份& ...
- 基于jQuery带标题的图片3D切换焦点图
今天给大家分享一款基于jQuery带标题的图片3D切换焦点图.这款焦点图适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗. 实现的代码. htm ...
- Android 应用接入广点通统计API 方案
官方给你参考文档,很扯淡,是c++和python脚本: 安卓java代码接入如下: package com.edaixi.util; import java.io.UnsupportedEncodin ...
- Android 一个抽奖应用的逆向破解全流程之加固自己应用
转自: <a href="http://www.pedant.cn/2014/07/22/crack-a-draw-app/">http://www.pedant.cn ...
- ObjectiveC 文件操作一
1,引用和使用文件 NSFileManager 是一个单例对象,在mac应用中可以获取任何地址,在IOS中获取的是相对应的应用程序的地址.可以使用 defaultManager 来得到当前应用程序地址 ...
- QT5.4 计算器程序 打包&发布,解决dll的最新解决方案(图文并茂,很清楚)
QT写界面还是很不错,就是打包会比较麻烦,折腾了一天总算是打包完成了. QT软件的打包发布一个难点是必备dll文件的识别,现在高版本QT自带了一个windeployqt工具,直接会把需要的dll生成一 ...
- Codeforces Round#1
A. Theatre Square 题目大意:有一个长宽为m和n的广场,用边长为a的正方形去铺盖,问铺满最少需要多少正方形 题解:题目分解为用长度为a的线条分别去覆盖长度为m和n的线条,计算两者的乘积 ...
- Eclipse、MyEclipse优化,提高运行速度
MyEclipse 是公认的优秀的软件开发工具,使用非常广泛.相信很多人在使用的过程中,发现其运行速度比较慢,因为每次操作的背后,它调用了很多的命令,执行了很多操作:但是其中大部分的操作都是非必须的: ...