// 这题坑爹啊 , 米有看清这已经是topsort() 的了, 害我浪费20多分钟写了那么长还爆内存....
Source Code

Problem:
1949 User: eth1
Memory: 292K Time: 1500MS
Language: C
++ Result: Accepted
Source 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;
}

 posted on 2011-05-20 22:24  eth0  阅读(145)  评论(0编辑  收藏  举报