// 这题坑爹啊 , 米有看清这已经是topsort() 的了, 害我浪费20多分钟写了那么长还爆内存....Source CodeProblem: 1949 User: eth1Memory: 292K Time: 1500MSLanguage: C++ Result: AcceptedSource Code#include <iostream>#include <algorithm>#include <cmath>#include <cstring>using namespace std;//bool vis[10001][10001];int time[10001],n;//max_time[10001],d[10001];int main(){ int m,a; cin>>n; // memset(vis,0,sizeof(vis)); // memset(max_time,0,sizeof(max_time)); // memset(d,0,sizeof(d)); cin>>time[1]>>m; for(int i=2;i<=n;i++) { cin>>time[i]>>m; int tem=0; while(m--) { cin>>a; tem=max(tem,time[a]); } time[i]+=tem; } sort(time+1,time+1+n); cout<<time[n]<<endl; //topsort(); return 0;}/////// 米有排序好的...void topsort(){ int k=-1; for(int i=1;i<=n;i++) { if(!d[i]) { d[i]=k; k=i; } } int maxx=0; for(int j=1;j<=n;j++) { int tem=k; k=d[k]; max_time[tem] += time[tem]; maxx = max(maxx,max_time[k]); for(int i=1;i<=n;i++) { if(vis[tem][i]) { max_time[i]=max(max_time[i],max_time[tem]); if( (--d[i])==0 ) { d[i]=k; k=i; } } } } sort(max_time+1,max_time+n+1); //for(int i=1;i<=n;i++) //cout<<max_time[i]<<endl; cout<<max_time[n]<<endl;}int main(){ int m,a; cin>>n; memset(vis,0,sizeof(vis)); memset(max_time,0,sizeof(max_time)); memset(d,0,sizeof(d)); for(int i=1;i<=n;i++) { cin>>time[i]>>m; while(m--) { cin>>a; vis[a][i]=1; d[i]++; } } topsort(); return 0;}
原文链接: https://www.cnblogs.com/eth0/archive/2011/05/20/2052426.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/25869
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!