将每个translation的输入和输出place全部记录下来,模拟即可,当所有translation都不能工作时,就说明dead了。

AC代码:

#include<cstdio>
#include<vector>
using namespace std;

const int maxn = 100 + 5;

struct node{
    vector<int> in, out;
}tran[maxn];

int p[maxn]; //the number of tokens in  all places

int main(){
    int pn, tn, nf, kase = 1;
    while(scanf("%d", &pn) == 1 && pn){
        for(int i = 1; i <= pn; ++i){
            scanf("%d", &p[i]);
        }
        scanf("%d", &tn);
        for(int i = 1; i <= tn; ++i){
            int x;
            while(scanf("%d", &x) == 1 && x){
                if(x < 0) tran[i].in.push_back(-x);
                else tran[i].out.push_back(x);
            }
        }
        scanf("%d",&nf);
        bool dead = 0;
        int h;
        for(h = 0; h < nf; ++h){
            int cnt = 0;
            for(int i = 1; i <= tn; ++i){
                bool flag = 1;
                vector<int> &in = tran[i].in, &out = tran[i].out;
                for(int j = 0; j < in.size(); ++j){
                    if(p[in[j]] == 0) {
                        flag = 0;
                        while(j) p[in[--j]]++; //
                        break;
                    }
                    else p[in[j]]--;
                }
                if(!flag) ++cnt;
                else {
                    for(int k = 0; k < out.size(); ++k) p[out[k]]++;
                    break;
                }
            }
            if(cnt == tn) {
               dead = 1;
               break;
            }
        }
        if(dead) printf("Case %d: dead after %d transitions\n", kase++, h);
        else printf("Case %d: still live after %d transitions\n", kase++, nf);
        printf("Places with tokens:");
        for(int i = 1; i <= pn ; ++i){
            if(p[i]) printf(" %d (%d)", i, p[i]);
        }
        printf("\n\n");
        for(int i = 1; i <= tn ; ++i) {
            tran[i].in.clear();
            tran[i].out.clear();
        }
    }
    return 0;
}

如有不当之处欢迎指出!

最新文章

  1. LInux MySQL 数据库 的一些操作
  2. Activity与Fragment
  3. 代写assignment
  4. RDIFramework.NET ━ .NET快速信息化系统开发框架钜献 V2.9 版本震撼发布
  5. Sealed密封类
  6. java基础之:详解内部类(转载)
  7. 解决wamp mysql数据库出现乱码的问题。
  8. HTML元素大小和位置相对于谁的问题
  9. Android UI 开发
  10. 0622 python 基础05
  11. 如何设计一个 iOS 控件?(iOS 控件完全解析)
  12. JGroups 入门实践(转)
  13. gen_grant_dml.sql
  14. node.js零基础详细教程(5):express 、 路由
  15. Python模块操作
  16. 百度 Javascript开发 API
  17. 《PyQt5快速开发与实战了》正式发售 !!!
  18. 项目管理利器maven学习笔记(一):maven介绍及环境搭建
  19. net core 小坑杂记之配置文件读取 02 (控制器里读)
  20. InnoDB引擎体系架构

热门文章

  1. junit4X系列--Statement
  2. Android Acitivy切换平移动画效果实现
  3. Codeforce C. Bus
  4. Python 定位桌面
  5. ArcSDE 10.1安装、配置、连接
  6. JAVA并发编程学习笔记------线程的三种创建方式
  7. 使用hbase小结
  8. 没有dev-server.js文件,如何进行后台数据模拟?
  9. OI常用读入方式效率测试
  10. 自己动手实践 spring retry 重试框架