泥们有没有用拓扑排序做的?

P2014 [CTSC1997] 选课

```cpp #include <bits/stdc++.h> using namespace std; struct node { int num; int fa; int son; }p[400]; queue < int > q; int f[400][400]; int n,m; int main() { int i,j,k; scanf("%d%d",&n,&m); m++; p[0].fa=-1; for(i=1;i<=n;i++) { scanf("%d%d",&p[i].fa,&p[i].num); for(j=1;j<=m;j++) f[i][j]=p[i].num; p[p[i].fa].son++; } for(i=1;i<=n;i++) if(p[i].son==0) q.push(i); while(!q.empty()) { int x=q.front(); q.pop(); int fa=p[x].fa; if(fa==-1) break; p[fa].son--; if(p[fa].son==0) {q.push(fa);} for(i=m;i>=0;i--) { for(j=i-1;j>=0;j--) { f[fa][i]=max(f[fa][i-j]+f[x][j],f[fa][i]); } } } printf("%d",f[0][m]); return 0; } ``` --------------------- 作者:Chlience 来源:CSDN 原文:https://blog.csdn.net/Force_CHL/article/details/77504069
by ты @ 2019-02-21 15:45:02


上一页 |