Petri Net Simulation(简单魔模拟)

比较简单的,注意的问题是一个输入库可能话费多个货物进行转化,需要对输入进行特殊处理

Problem VerdictLangTimeBestRankSubmit Time

|discuss804-Petri Net SimulationAcceptedC++0.0990.028142 mins ago

#include<cstdio>#include<vector>#include<algorithm>using namespace std;const int maxn = 105;int np,nt;struct Node{int id;int num;Node(int id = 0,int num = 0):id(id),num(num){};};vector<Node>in[maxn];vector<Node>out[maxn];int np_num[maxn],arr[100005];bool solve(){for(int i = 1; i <= nt; i++){int ok = 1;for(int j = 0; j < in[i].size(); j++){int id = in[i][j].id,num = in[i][j].num;if(np_num[id] < num){ok = 0;break;}}if(ok){for(int j = 0; j < in[i].size(); j++){int id = in[i][j].id,num = in[i][j].num;np_num[id] -= num;}for(int j = 0; j < out[i].size(); j++){int id = out[i][j].id,num = out[i][j].num;np_num[id] += num;}return true;}}return false;}int main(){int Case = 1;//freopen("in.txt","r",stdin);while(scanf("%d",&np) && np){for(int i = 1; i <= np; i++)scanf("%d",&np_num[i]);scanf("%d",&nt);for(int i = 1; i <= nt; i++){int cnt = 0;in[i].clear(); out[i].clear();while(scanf("%d",&arr[cnt]) && arr[cnt])cnt ++;sort(arr,arr + cnt);if(cnt == 0) continue;int id = arr[0],num = 1;for(int j = 1; j < cnt; j++){if(arr[j] != arr[j – 1]){if(id < 0)in[i].push_back(Node(-id,num));if(id > 0)out[i].push_back(Node(id,num));id = arr[j];num = 1;}else num++;}if(id < 0)in[i].push_back(Node(-id,num));if(id > 0)out[i].push_back(Node(id,num));}int cir,i;scanf("%d",&cir);for(i = 1; i <= cir; i++){if(!solve())break;}if(i > cir)printf("Case %d: still live after %d transitions\n",Case++,i – 1);elseprintf("Case %d: dead after %d transitions\n",Case++,i – 1);printf("Places with tokens:");for(int i = 1; i <= np; i++){if(np_num[i])printf(" %d (%d)",i,np_num[i]);}puts("\n");}return 0;}

,闹里有钱,静处安身。

Petri Net Simulation(简单魔模拟)

相关文章:

你感兴趣的文章:

标签云: