1 条题解

  • 0
    @ 2025-2-14 21:20:42

    C++ :

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #define MAXN 101
    using namespace std;
    int g[MAXN][MAXN];
    int p[MAXN],n,tot=0;
    int f[MAXN];
    bool v[MAXN];
    int dp(int);
    int main(){
    	//freopen("tree.in","r",stdin);
    	//freopen("tree.out","w",stdout);
    	memset(f,-1,sizeof(f));
    	cin>>n;
    	string tem1;
    	getline(cin,tem1);
    	for(int i=1;i<=n;i++){
    		string s;
    		bool flag=0;
    		getline(cin,s,'\n');
    		int tem=0,l=s.size();
    		for(int j=0;j<l;j++){
    			if(s[j]-'0'>=0&&s[j]-'0'<=9){
    				tem*=10;
    				tem+=s[j]-48;
    			}
    			if(j==l-1){
    				if(flag){
    					g[i][++g[i][0]]=tem;
    				}
    				else{
    					p[i]=tem;
    					flag=1;
    				}
    				break;
    			}
    			if(s[j]==' '){
    				if(!flag){
    					flag=1;
    					p[i]=tem;
    				}
    				else{
    					g[i][++g[i][0]]=tem;
    				}
    				tem=0;
    			}
    		}
    	}
    	for(int i=1;i<=n;i++){
    		if(f[i]==-1) dp(i);
    	}
    	for(int i=1;i<=n;i++){
    		if(f[i]>tot) tot=f[i];
    	}
    	cout<<tot<<endl;
    	return 0;
    }
    int dp(int x){
    	if(f[x]!=-1) return f[x];
    	f[x]=0;
    	int my_max=0;
    	for(int i=1;i<=g[x][0];i++){
    		int t=g[x][i];
    		int tem=dp(t);
    		if(my_max<tem) my_max=tem;
    	}
    	f[x]=p[x]+my_max;
    	return f[x];
    }
    

    Pascal :

    var
      n,i,k,x,j,ans:longint;
      a,c,f:array[1..10000] of longint;
      b:array[0..1000,0..1000] of longint;
    function max(x,y:longint):longint;
    begin if x>y then exit(x) else exit(y); end;
    begin
      readln(n);
      for i:=1 to n do
       begin
         read(a[i]);
         k:=0;
         while not eoln do
           begin
             read(x);
             k:=k+1;
             b[i,k]:=x;
           end;
         c[i]:=k;
       end;
       for i:=n downto 1 do
        begin
         for j:=1 to c[i] do
           begin
             f[i]:=max(f[i],a[b[i,j]]);
           end;
          a[i]:=a[i]+f[i];
          if a[i]>ans then ans:=a[i];
         end;
       writeln(ans);
    end.
    
    
    
    • 1

    信息

    ID
    844
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者