标签:题目 return class read str print img play 空间
这几天又在颓.
我的blog难度目前还比较低,主要面向像我这样子的新手(当然内容也会尽量讲得具体清楚一些)x
如果有错误还请指出~
写完随笔之后才去翻了一下这题题解之后才注意到这题是有序的
QAQ完全不用像我这么麻烦啊x
题目大意:
噫这应该算是经典题?(然而我今天才做x
一开始没看到准备工作不超过一百个…(emm空间开不起啊咋办?
然后又去看了一眼题面x日常石乐志
贴代码x
#include<cstdio> const int N=10005; const int M=1000005; struct edge{int to,next;}edges[M]; int head[N],cnt; int n,len,ans; int dp[N],w[N]; bool mark[N]; inline int read() { int s=0;char c;while((c=getchar())<‘0‘||c>‘9‘); do{s=s*10+c-‘0‘;}while((c=getchar())>=‘0‘&&c<=‘9‘);return s; } inline int max(int x,int y){return x>y?x:y;} inline void addEdge(int u,int v) { edges[++cnt]=(edge){v,head[u]}; head[u]=cnt; } inline int dfs(int x) { if(mark[x])return dp[x]; int temp=0; for(int i=head[x];i;i=edges[i].next) { temp=max(temp,dfs(edges[i].to)); }mark[x]=1; return (dp[x]=temp+dp[x]); } int main() { n=read(); for(int i=1;i<=n;i++) { int key,val,temp,tot=0; key=read();val=read();dp[key]=val; while(temp=read()) { addEdge(key,temp); tot++; } if(tot==0)mark[key]=1; } for(int i=1;i<=n;i++)if(!mark[i])dfs(i); for(int i=1;i<=n;i++)ans=max(ans,dp[i]); printf("%d",ans); return 0; }
标签:题目 return class read str print img play 空间
原文地址:http://www.cnblogs.com/yoooshinow/p/7427380.html