社区讨论

萌新玄关求助P1113 杂务

题目总版参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lz6ecxsf
此快照首次捕获于
2024/07/29 10:55
2 年前
此快照最后确认于
2024/07/29 12:00
2 年前
查看原帖
为什么
CPP
#include <bits/stdc++.h>
using namespace std;
int n,id,tim[50001],du[50001],ans,anss[50001];
struct ff
{
  int nd,len;
};
vector<int> vec[50001];
queue<ff> q;
int main()
{
  cin>>n;
  for(int i = 1; i <= n; i++)
  {
    cin>>id>>tim[i];
    int t;
    while(cin>>t)
    {
      if(t == 0) break;
      vec[t].push_back(i);
      du[i]++;
    }
  }
  for(int i = 1; i <= n; i++)
    if(du[i] == 0)
    {
      q.push({i,tim[i]});
      anss[i] = tim[i];
    }
  while(q.size())
  {
    int t = q.size();
    for(int i = 1; i <= t; i++)
    {
      ff tt = q.front();
      ans = max(ans,tt.len);
      for(int j = 0; j < vec[tt.nd].size(); j++)
      {
        int ttt = vec[tt.nd][j];
        du[ttt]--;
        anss[ttt] = max(anss[ttt],anss[tt.nd] + tim[ttt]);
        if(du[ttt] == 0) q.push({ttt,tim[ttt] + tt.len});
        //cout<<tim[ttt] + tt.len<<' ';
      }
      q.pop();
    }
  }
  sort(anss + 1,anss + 1 + n);
  cout<<anss[n];
  return 0;
}
上述能AC
而以下代码
CPP
#include <bits/stdc++.h>
using namespace std;
int n,id,tim[50001],du[50001],ans;
struct ff
{
  int nd,len;
};
vector<int> vec[50001];
queue<ff> q;
int main()
{
  cin>>n;
  for(int i = 1; i <= n; i++)
  {
    cin>>id>>tim[i];
    int t;
    while(cin>>t)
    {
      if(t == 0) break;
      vec[t].push_back(i);
      du[i]++;
    }
  }
  for(int i = 1; i <= n; i++)
    if(du[i] == 0)
      q.push({i,tim[i]});
  while(q.size())
  {
    int t = q.size();
    for(int i = 1; i <= t; i++)
    {
      int tt = q.front().nd;
      ans = max(ans,q.front().len);
      for(int j = 0; j < vec[tt].size(); j++)
      {
        int ttt = vec[tt][j];
        du[ttt]--;
        if(du[ttt] == 0) q.push({ttt,tim[ttt] + q.front().len});
      }
      q.pop();
    }
  }
  cout<<ans;
  return 0;
}
才20分?
这里的答案为什么非要用数组储存啊QwQ

回复

0 条回复,欢迎继续交流。

正在加载回复...