为什么
#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 而
#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