1. 程式人生 > >https://www.luogu.org/problemnew/show/P1113

https://www.luogu.org/problemnew/show/P1113

用DP來寫,下次加拓撲

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<queue>
 7 #include<stdlib.h>
 8 #define mem(a) memset(a,0,sizeof(a))
 9 using namespace std;
10 int f[10005];
11 int main()
12 { 13 int t,n,time,u; 14 cin>>t; 15 int ans=0; 16 for(int i=1;i<=t;i++) 17 { 18 cin>>n>>time; 19 while((cin>>u)&&u) 20 f[i]=max(f[i],f[u]); 21 //也可以寫成 int s; s=max(f[u],s); f[i]=s+time; 22 f[i]+=time; 23 ans=max(f[i],ans); 24 /*時時更新,f[i]改變的不是f[u],所以是不斷取更高的,
25 因為u<i且有無限個工人,故就算存在多個u,也是求在i時的f[i]max*/ 26 } 27 cout<<ans<<endl; 28 return 0; 29 }
View Code