Problem UVA804-Petri Net Simulation

Accept:251  Submit:1975

Time Limit: 3000 mSec

Problem Description

 Input

Each Petri net description will first contain an integer NP (0 < NP < 100) followed by NP integers specifying the number of tokens initially in each of the places numbered 1,2,...,NP. Next there will appear an integer NT (0 < NT < 100) specifying the number of transitions. Then, for each transition (in increasing numerical order 1,2,...,NT) there will appear a list of integers terminated by zero. The negative numbers in the list will represent the input places, so the number −n indicates there is an input place at n. The positive numbers in the list will indicate the output places, so the number p indicates an output place at p. There will be at least one input place and at least one output place for each transition. Finally, after the description of all NT transitions, there will appear an integer indicating the maximum number of firings you are to simulate, NF. The input will contain one or more Petri net descriptions followed by a zero.

 Output

For each Petri net description in the input display three lines of output. On the first line indicate the number of the input case (numbered sequentially starting with 1) and whether or not NF transitions were able to fire. If so, indicate the net is still live after NF firings. Otherwise indicate the net is dead, and the number of firings which were completed. In either case, on the second line give the identities of the places which contain one or more tokens after the simulation, and the number of tokens each such place contains. This list should be in ascending order. The third line of output for each set should be blank. The input data will be selected to guarantee the uniqueness of the correct output displays.

 Sample Input

2
1 0
2
-1 2 0
-2 1 0
100
3
3 0 0
3
-1 2 0
-2 -2 3 0
-3 1 0
100
0
 

 Sample Ouput

Case 1: still live after 100 transitions

Places with tokens: 1 (1)
Case 2: dead after 9 transitions

Places with tokens: 2 (1)

题解:这个题就是个模拟,题意稍有一些难懂(英文比紫书的中文好懂......)

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <vector>
using namespace std; const int maxn = +; struct Place{
int token;
}place[maxn]; struct Point{
int pos,sum;
Point(int pos = ,int sum = ) :
pos(pos),sum(sum) {}
}; struct Tra{
vector<Point> input,output;
}Tra[maxn]; int n,m,iCase = ;
int in[maxn],out[maxn]; bool solve(){
for(int i = ;i <= m;i++){
bool ok = true;
for(int j = ;j < (int)Tra[i].input.size();j++){
int pos = Tra[i].input[j].pos;
int sum = Tra[i].input[j].sum;
if(place[pos].token < sum){
ok = false;
break;
}
}
if(ok){
for(int k = ;k < (int)Tra[i].input.size();k++){
int pos = Tra[i].input[k].pos;
int sum = Tra[i].input[k].sum;
place[pos].token -= sum;
}
for(int k = ;k < (int)Tra[i].output.size();k++){
int pos = Tra[i].output[k].pos;
int sum = Tra[i].output[k].sum;
place[pos].token += sum;
}
return true;
}
}
return false;
} int main()
{
//freopen("input.txt","r",stdin);
while(~scanf("%d",&n) && n){
for(int i = ;i <= n;i++){
scanf("%d",&place[i].token);
}
scanf("%d",&m);
for(int i = ;i <= m;i++){
Tra[i].input.clear();
Tra[i].output.clear();
}
int x;
for(int i = ;i <= m;i++){
memset(in,,sizeof(in));
memset(out,,sizeof(out));
while(scanf("%d",&x) && x){
if(x < ) in[-x]++;
else out[x]++;
}
for(int t = ;t <= n;t++){
if(in[t]) Tra[i].input.push_back(Point(t,in[t]));
if(out[t]) Tra[i].output.push_back(Point(t,out[t]));
}
}
int round;
scanf("%d",&round);
int tt;
for(tt = ;tt <= round;tt++){
if(!solve()) break;
}
printf("Case %d: ",iCase++);
if(tt > round) printf("still live after %d transitions\n",round);
else printf("dead after %d transitions\n",tt-);
printf("Places with tokens:");
for(int i = ;i <= n;i++){
if(place[i].token){
printf(" %d (%d)",i,place[i].token);
}
}
printf("\n\n");
}
return ;
}

UVA804-Petri Net Simulation(模拟)的更多相关文章

  1. [刷题]算法竞赛入门经典(第2版) 6-7/UVa804 - Petri Net Simulation

    题意:模拟Petri网的执行.虽然没听说过Petri网,但是题目描述的很清晰. 代码:(Accepted,0.210s) //UVa804 - Petri Net Simulation //Accep ...

  2. Uva - 804 - Petri Net Simulation

    Input: petri.in A Petri net is a computational model used to illustrate concurrent activity. Each Pe ...

  3. 【习题 6-7 UVA - 804】Petri Net Simulation

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 模拟就好 [代码] /* 1.Shoud it use long long ? 2.Have you ever test sever ...

  4. Leetcode874.Walking Robot Simulation模拟行走的机器人

    机器人在一个无限大小的网格上行走,从点 (0, 0) 处开始出发,面向北方.该机器人可以接收以下三种类型的命令: -2:向左转 90 度 -1:向右转 90 度 1 <= x <= 9:向 ...

  5. LightOJ Beginners Problems 部分题解

    相关代码请戳 https://coding.net/u/tiny656/p/LightOJ/git 1006 Hex-a-bonacci. 用数组模拟记录结果,注意取模 1008 Fibsieve's ...

  6. 蒙特卡洛树搜索算法(UCT): 一个程序猿进化的故事

    前言: 本文是根据的文章Introduction to Monte Carlo Tree Search by Jeff Bradberry所写. Jeff Bradberry还提供了一整套的例子,用p ...

  7. NeHe OpenGL教程 第三十九课:物理模拟

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  8. swat主流域文件(file.cio)参数详解——引自http://blog.sciencenet.cn/blog-922140-710636.html

    % file.clo,即主流域文件用于文件管理,包括与模型选项.气候输入.数据库和输出控制相关的信息. Master Watershed File: file.cio Project Descript ...

  9. QM5_Didstribution

    Basic Concepts Probability distribution Discrete distribution (离散分布) The distribution of the discret ...

  10. Cisco Packet Tracer中通过集线器组网

    Cisco Packet Tracer中可以通过集线器将多台电脑完成通信. Cisco Packet Tracer 6.2.0 一.添加三台电脑设备 1.按照下图1.2步骤操作,2步骤执行三次,拖拽P ...

随机推荐

  1. 一个复杂Json的解析

    { "website": { "1": { "basic": { "homepage": "http://py ...

  2. HAProxy(三):Keeplived+HAProxy搭建高可用负载均衡动静分离架构基础配置示例

    一.安装环境 1.软件版本 HAProxy:1.5.18 Keepalived:1.3.5 Nginx:1.12.2 PHP:7.2 系统版本:CentOS 7.4 2.IP分配与架构图 3.安装软件 ...

  3. c++中虚析构函数

    当指向基类的指针指向新建立的派生类对象而且基类和派生类都调用new向堆申请空间时,必须将基类的析构函数声明为虚函数,从而派生类的析构函数也为虚函数,这样才能在程序结束时自动调用它,从而将派生类对象申请 ...

  4. 导入本地的oracle数据库文件

    1. 创建表空间 create tablespace charge_zang datafile 'F:\app\zang\oradata\orcl\charge_zang.dbf' size 50M ...

  5. C#7.2——编写安全高效的C#代码

    原文地址:https://docs.microsoft.com/zh-cn/dotnet/csharp/write-safe-efficient-code?view=netcore-2.1 值类型的优 ...

  6. PHP 在WIN10 下配置

    apache: https://www.apachehaus.com/ php: https://windows.php.net/ https://windows.php.net/ 集成安装配置版:h ...

  7. wangEditor-基于javascript和css开发的 Web富文本编辑器, 轻量、简洁、易用、开源免费(2)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 微信小程序顶部(navigationBar)设置为透明

    我记得在微信小程序中导航栏的颜色可以在app.json.  window里面添加navigationBarBackgroundColor属性,但是颜色只能为纯色.不能使用rgb,或者rgba的色号. ...

  9. CSS&JS两种方式实现手风琴式折叠菜单

    <div class="accordion"> <div id="one" class="section"> < ...

  10. Keras 中 TimeDistributed 和 TimeDistributedDense 理解

    From the offical code: class TimeDistributed(Wrapper): """This wrapper applies a laye ...