Algernon's Noxious Emissions POJ1121 zoj1052

One of the greatest alchemists of the lower Middle Renaissance, Algernon da Vinci (one of Leonardo's lesserknown cousins), had the foresight to construct his chemical works directly over a fast-running stream. Through a series of clever pipes and sluices, he routed portions of the stream past each of the tables where his alchemists prepared their secret brews, allowing them to dispose of their chemical byproducts into the waters flowing by the table.
As Algernon's business grew, he even added additional floors to his
factory, with water lifted to the higher floors by treadmill-powered pumps (much
to the dismay of the apprentices who found themselves assigned to pump duty).
The pipework for the entire disposal system became quite complex. It was even
rumored by some that the pipes actually circled back in some places, so that a
particularly odorous compound flushed away from one table might return to that
very same spot a few minutes later.
All was not well, however.
Algernon's factory suffered from a series of mishaps, minor explosions, gas
clouds, etc. It became obvious that chemicals dumped at one table might react
violently with other chemicals dumped from another table downstream. Algernon
realized that he needed to trace the possible chemical flows through his
factory.
Write a program to aid Algernon in this task. To preserve the
secrecy of the chemical processes that are Algernon's stock in trade, all
chemicals will be identified by a single upper-case letter. All tables are
identified by positive numbers in the range 1��N, where N is the number of
tables.
Input Format:
Line 1:
# of work tables, integer
(henceforth referred to as N). N < 50
Lines 2��N+1
For each
table:
- a list of chemicals dumped into the stream at that table, followed by
- a list of chemicals that, if they appeared at that table, would be
harmlessly neutralized by the reactions at that table, allowing no further trace
of that chemical to flow downstream (we will assume that the rate of work at
each table can be adjusted as necessary to guarantee total neutralization of
whatever amount of these chemicals arrive from upstream).
Each
of these lists is given as a series of upper-case alphabetic characters. The
only exception is that a special list, consisting of a single '.' character,
will be used to denote an empty list. The two lists are separated from one other
by one or more blanks. The same chemical will never appear in both lists.
Lines N+2��?
These lines provide a description of the pipeworks.
Each line contains a pair of integers in the range 1��N, separated by one or
more blanks:
I J
meaning that the table number I is upstream of table
number J - anything dumped into the stream at table I or that arrives in the
stream at table I and is not neutralized can then be counted on to arrive at
table J.
No (I,J) pair will be listed more than once, but the pairs may occur in any
order. I and J will never be the same number.
The end of input is
signaled by a pair of zeros:
0 0
Note that if a table only receives
water directly from the stream entering the building, that table will never
occur in the second position of a pair. Similarly, any table that discharges
only into the stream leaving the building will never occur in the first position
of a pair.
Output Format:
There will be N lines of output, one for each
table, in the same order as they appeared in the program input. Each line will
contain the list of chemicals that can be expected at that table's output. This
list will be printed as a (possibly empty) list of upper-case alphabetic
characters between two colons (:). No empty spaces should be printed on the
line. The characters in the list should be sorted in alphabetic order.
This problem contains multiple test cases!
The first line of a multiple input is an integer N, then a blank line
followed by N input blocks. Each input block is in the format indicated in the
problem description. There is a blank line between input blocks.
The output format consists of N output blocks. There is a blank line between
output blocks.

Sample Input:
For the figure at the right, an input would be:
1
4
AB C
C BDA
BCD .
. A
1 2
2 4
3 1
1 3
3 4
0 0
Sample Output:
:ABD:
:C:
:ABCD:
:BCD:
POJ是一个测试案例,只需注释Line 和ICase这几行就行。
#include <stdio.h>
#include <memory.h> const int MAXN = ; int main()
{
int i, j;
int mask[];
for (i = ; i < ; i++)
mask[i] = <<i;
int iCase;
scanf("%d", &iCase);
int line = ;
while (iCase--)
{
if (line) printf("\n");
line = ;
int output[MAXN];
int dump[MAXN];
int neutra[MAXN];
char c;
int n;
scanf("%d\n", &n);
for (i = ; i <= n; i++)
{
int temp = ;
do {
c = getc(stdin);
if (c >= 'A') temp |= mask[c-'A'];
} while (c != ' ');
dump[i] = output[i] = temp;
temp = ;
while((c = getc(stdin)) != '\n')
if (c >= 'A') temp |= mask[c-'A'];
neutra[i] = temp;
dump[i] &= ~temp;
output[i] &= ~temp;
}
bool graph[MAXN][MAXN];
bool table[MAXN];
memset(graph, , sizeof(graph));
for (i = ; i <= n; i++)
table[i] = true;
int a, b;
while(scanf("%d %d", &a, &b) && (a || b))
graph[a][b] = true;
bool flag;
do {
flag = false;
for (i = ; i <= n; i++)
if (table[i])
{
table[i] = false;
int temp = output[i];
for (j = ; j <= n; j++)
if (graph[i][j])
{
int newOut = (output[j] | temp) & (~neutra[j]);
if (output[j] != newOut)
{
output[j] = newOut;
table[j] = true;
}
}
flag = true;
break;
}
} while (flag);
for (i = ; i <= n; i++)
{
printf(":");
for (j = ; j <= ; j++)
if ((output[i] & mask[j]) != )
printf("%c", char(j+'A'));
printf(":\n");
}
}
return ;
}
Algernon's Noxious Emissions POJ1121 zoj1052的更多相关文章
- POJ题目细究
acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP: 1011 NTA 简单题 1013 Great Equipment 简单题 102 ...
- 【转】POJ百道水题列表
以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight ...
- algernon 基于golang 的独立的支持redis lua pg。。。 的web server
algernon 看到github 的介绍很很强大,一下子想到了openresty,功能看着很强大,支持 redis pg lua markdown quic http2 mysql 限速 pongo ...
- 38 Cell-phone Emissions can change Brain Activity 手机辐射有可能改变大脑活动
Cell-phone Emissions can change Brain Activity 手机辐射有可能改变大脑活动 So many people use the cell phone so fr ...
- Lesson 11 Not guilty
Lesson 11 Not guilty guilty ['gɪlti] adj. 有罪的:内疚的 be guilty of - He is guilty of murder. be innocent ...
- RXJava by Example--转
原文地址:https://www.infoq.com/articles/rxjava-by-example Key takeaways Reactive programming is a specif ...
- Android Weekly Notes Issue #223
Android Weekly Issue #223 September 18th, 2016 Android Weekly Issue #223 本期内容包括: Offline时间戳处理; Acces ...
- rxjs5.X系列 —— transform系列 api 笔记
欢迎指导与讨论:) 前言 本文是笔者翻译 RxJS 5.X 官网各类operation操作系列的的第一篇 -- transform转换.如有错漏,希望大家指出提醒O(∩_∩)O.更详细的资料尽在rxj ...
- 安卓中的Model-View-Presenter模式介绍
转载自:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0425/2782.html 英文原文:Introduction to M ...
随机推荐
- HDU 5311
把anniversary分成三个区间,分别枚举每个区间在给定模板中的长度.每次枚举完一个区间,记录下区间长度和起始坐标,下次从剩下长度开始枚举,避免重复. #include<iostream&g ...
- apache+php+mysql windows下环境配置
需要注意的是,目前apache和php以及mysql都要用32位的,机子是64位的也是安装32位.我之前安装64位的版本,总是出现问题.回归正题: 所需要软件: 1.apache:去官网下载,我这边用 ...
- 使用Async同步执行异步函数
为了适应异步编程,减少回调的嵌套,我在项目中引入了Async,当批量处理且需要同步执行一些逻辑相同的异步函数时,觉得还是Async最为靠谱. 我有一个类似下面代码的场景,依据数组中的每一个元素执行一个 ...
- Tomcat线程池,更符合大家想象的可扩展线程池
因由 说起线程池,大家可能受连接池的印象影响,天然的认为,它应该是一开始有core条线程,忙不过来了就扩展到max条线程,闲的时候又回落到core条线程,如果还有更高的高峰,就放进一个缓冲队列里缓冲一 ...
- 第二百九十五天 how can i 坚持
买了个小米电话卡,写的让周六日送,非得今天给送来,浪费了1块钱.买回来还没法激活,这.. 昨天差点挂掉,今天感觉好多了,不过今天好冷,回来快冻死了. 今天啊,年终奖订下来了,没有想象的高 啊,有点小失 ...
- HTML5每日一练之input新增加的六种时间类型应用
今天介绍一下input在HTML5中新增加的时间类型的应用,与昨天的练习一样,如果在以下这几种输入框中输入的格式不正确,也是无法提交的. 注意:此种类型的input在Opera10+中效果为佳,Chr ...
- POJ 3468 A Simple Problem with Integers (线段树成段更新)
题目链接:http://poj.org/problem?id=3468 题意就是给你一组数据,成段累加,成段查询. 很久之前做的,复习了一下成段更新,就是在单点更新基础上多了一个懒惰标记变量.upda ...
- SQL存储过程调试
转自:http://www.cnblogs.com/xiangzhong/archive/2012/10/27/2742974.html 今天突然有同事问起,如何在sqlserver中调试存储过程(我 ...
- MVC生命周期
MVC之前的那点事儿系列 转自:http://www.cnblogs.com/TomXu/p/3756794.html http://www.cnblogs.com/Joans/archive/201 ...
- Oracle-11g 从表空间删除数据文件
从表空间删除数据文件前提条件 如果欲从表空间中删除数据文件,那么该数据文件必须为空,否则将报出"ORA-03262: the file is non-empty"的错误. 从表 ...