还有6天CSP-S,慌得一批
#include<bits/stdc++.h> using namespace std; int head[3000005],v[3000005],n,sum,l,end[3000005],rdu[3000500]; queue<int>q; struct node { int to,next; } a[2000005]; inline void add(int from,int to) { a[++l].to=to; a[l].next=head[from]; head[from]=l; rdu[to]++; } int tp() { int ans=0; for(int i=1; i<=n; i++) if(!rdu[i])q.push(i); while(q.size()) { int x=q.front(); q.pop(); end[x]+=v[x]; ans=ans>end[x]?ans:end[x]; for(register int i=head[x]; i; i=a[i].next) { rdu[a[i].to]--; end[a[i].to]=end[a[i].to]>end[x]?end[a[i].to]:end[x]; if(!rdu[a[i].to])q.push(a[i].to); } } return ans; } int main() { scanf("%d",&n); for(int i=1; i<=n; i++) { int num,x=1; scanf("%d%d%d",&num,&v[i],&x); while(x) { add(x,i); scanf("%d",&x); } } printf("%d",tp()); return 0; }