1 条题解
-
0
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
- 上传者