1 条题解

  • 1
    @ 2024-4-12 12:49:46

    世界上最好的题解🫠

    #include<bits/stdc++.h>
    #define L 10005
    using namespace std;
    int n;//节点数
    int w[L] ;//点权
    vector<int> g[L];
    void input(){
    	cin>>n;
    	int x,l,t;
    	for(int i=1;i<=n;++i){
    		cin>>x>>l;
    		w[x]=l;
    		while(cin>>t,t!=0){
    			g[x].push_back(t);//实际上为反向邻接表
    		}
    	}
    }
    int res[L];
    int dfs(int k){
    	if(res[k])return res[k];
    	int ans=res[k]=w[k];
    	for(int i=0;i<g[k].size();++i){
    		int &t=g[k][i];
    		ans=max(ans,res[k]+dfs(t));
    	}
    	return res[k]=ans;
    }
    void viewres(){
    	for(int i=1;i<=n;++i)cout<<res[i]<<" ";
    }
    int main(){
    	input();
    	int ans=0;
    	for(int i=n;i>=1;--i){
    		if(!res[i])dfs(i);
    		ans=max(ans,res[i]);
    	}
    	cout<<ans;
    	return 0;
    }
    

    看完别忘了点赞哟👍

    • 1

    信息

    ID
    114
    时间
    1000ms
    内存
    125MiB
    难度
    3
    标签
    递交数
    8
    已通过
    6
    上传者