<img src="https://img-blog.youkuaiyun.com/20150403222956675?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcHFsZW8=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /><img src="https://img-blog.youkuaiyun.com/20150403223015333?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcHFsZW8=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /><img src="https://img-blog.youkuaiyun.com/20150403222953387?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcHFsZW8=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<cstdlib>
#include<stack>
using namespace std;
struct module
{
int start_signal;
int K;
int * gen_signal;
int time;
bool flag;
};
bool check(int tem,module * my_module,int N)
{
for(int i = 0;i < N;++i)
{
if(my_module[i].start_signal == tem)return true;
}
return false;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int N,M;
scanf("%d %d",&N,&M);
int *init = new int[M];
for(int i = 0;i < M;++i)
scanf("%d",&init[i]);
module * my_module = new module[N];
for(int i = 0;i < N;++i)
{
scanf("%d %d",&my_module[i].start_signal,&my_module[i].K);
if(my_module[i].K != 0)my_module[i].gen_signal = new int[my_module[i].K];
for(int j = 0;j<my_module[i].K;++j)
scanf("%d",&my_module[i].gen_signal[j]);
my_module[i].time = 0;
}
stack<int> singal;
for(int i = 0 ;i < M;++i)
{
for(int j = 0; j < N;++j)
{
if(my_module[j].start_signal == init[i])
{
my_module[j].time++;
for(int k =0;k <my_module[j].K;++k)
singal.push(my_module[j].gen_signal[k]);
}
}
}
while(!singal.empty())
{
int test = singal.top();
int flag = false;
for(int i = 0;i < N;++i)
{
my_module[i].flag = false;
if(my_module[i].start_signal == singal.top())
{
my_module[i].time++;
my_module[i].flag = true;
flag = true;
}
}
int flag1= false;
for(int i = 0;i < N;++i)
{
if(my_module[i].flag == true)
{
if(flag1 ==false)
{
singal.pop();
flag1 = true;
}
for(int j = 0;j <my_module[i].K;++j)
singal.push(my_module[i].gen_signal[j]);
int test1 = singal.top();
}
}
if(flag==false)singal.pop();
}
for(int i = 0;i < N;++i)
{
printf("%d ",my_module[i].time);
}
printf("\n");
delete []init;
delete []my_module;
}
getchar();
getchar();
getchar();
return 0;
}
代码自己写的都感觉有点乱。。。测试数据是通过了的 不知道能不能过
题目