从起点开始,按照拓扑排序的顺序依次更新dp[i],表示到该点能获得的最大值
#include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f #define ll __int64 #define mod 1000000007 using namespace std; int n,m,in[100010],out[100010],v[100010],dp[100010]; vector e[100010]; void topo() { int x,a; for(int i=0;i<=n;i++) dp[i]=-inf; queue q; for(int i=1;i<=n;i++) { if(in[i]==0) { dp[i]=v[i]; q.push(i); } } while(!q.empty()) { x=q.front(); q.pop(); for(int i=0;i