牛客bfs:工厂流水线

传送门
思路:如果加工到一个组件的其中一个零件时所花的时间加上本身加工所需的时间是大于加工完其所需零件的时间,那么此工序关系就不成立
详细解释都在注释中

#include <iostream>
#include <vector>

using namespace std;
struct machine
{
    int start;/*到加工至这个零件所用的时间*/
    int time;/*生产出零件本身所花的时间*/
    vector<int>need;/*生产这个零件所需要的零件*/
};
int main()
{
    int t;//机器台数
    cin >> t;
    while(t--)
    {
        vector<machine>s(905);/*每个组件的信息*/
        int n;
        cin >> n;//第一台机器所需要加工的组件的数目
        while(n--)
        {
            int id,p;/*组件id和所需零件数*/
            int start = 0;/*每个组件同时开始,生产至第一个零件所花的时间都是0*/
            int m ;/*一个组件所需的零件数目*/
            cin >> m;
            while(m--)
            {
                machine temp;
                temp.start = start;/*生产至零件前所需的时间*/
                cin >> id/*零件的id*/ >> temp.time/*生产这个零件本身所需时间*/ >> p/*生产此零件加工所需的零件*/;
                while(p--)
                {
                    int idx;
                    cin >> idx;
                    temp.need.push_back(idx);/*把零件加工所需的每个零件的id都push到need中*/
                }
                start += temp.time;/*下一个零件加工前所需的时间即为前几个零件加工所花时间的和*/
                s[id] = temp;
            }
        }
        bool flag = true;
        for(int i = 1; i < s.size(); i++)
        {
            for(int j = 0 ; j < s[i].need.size(); j++)
            {
                int index = s[i].need[j];/*每个组件的每个零件所需的零件*/
                if(s[i].start < s[index].start + s[index].time)/*如果加工这个组件的这个零件前所花的时间小于所需零件加工出来的时间总和则不存在此工序*/
                {
                    flag = false;
                }
            }
        }
        if(flag)
        {
            cout << "Yes" << endl;
        }
        else
        {
            cout << "No" << endl;
        }
    }
    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值