linkkkk
题意:
每个书有nnn页,每页都有前置页,学会这些前置页你才能够学会这页。每次阅读都是从111到nnn的顺序,问需要阅读几次才能够学完这本书。
思路:
对于每页和他的前置页,建图,u−>vu->vu−>v表示学会vvv必须要学会uuu,如果说u求最长路+1+1+1就是答案。代码:#includeusingnamespacestd;constintmaxn=2e5+10,inf=0x3f3f3f3f;inth[maxn],e[maxn],ne[maxn],w[maxn],idx;intdin[maxn],dp[maxn],n;vectortop;voidadd(intu,intv,intww){e[idx]=v,ne[idx]=h[u],w[idx]=ww,h[u]=idx++;}booltopsort{top.clear;queueq;for(inti=1;i<=n;i++)if(!din[i])q.push(i);while(!q.empty){intt=q.front;q.pop;top.push_back(t);for(inti=h[t];~i;i=ne[i]){intj=e[i];if(!--din[j])q.push(j);}}returntop.size==n;}intmain{int_;cin>>_;while(_--){memset(h,-1,sizeofh);idx=0;memset(din,0,sizeofdin);cin>>n;for(inti=1;i<=n;i++){intm;cin>>m;for(intj=1;j<=m;j++){intx;cin>>x;if(x>i)add(x,i,1);elseadd(x,i,0);din[i]++;}}if(!topsort)puts("-1");else{intans=0;memset(dp,0,sizeofdp);for(intnow:top){for(inti=h[now];~i;i=ne[i]){intj=e[i];dp[j]=max(dp[j],dp[now]+w[i]);}}for(inti=1;i<=n;i++)ans=max(ans,dp[i]);cout<
求最长路+1+1+1就是答案。
代码:
#includeusingnamespacestd;constintmaxn=2e5+10,inf=0x3f3f3f3f;inth[maxn],e[maxn],ne[maxn],w[maxn],idx;intdin[maxn],dp[maxn],n;vectortop;voidadd(intu,intv,intww){e[idx]=v,ne[idx]=h[u],w[idx]=ww,h[u]=idx++;}booltopsort{top.clear;queueq;for(inti=1;i<=n;i++)if(!din[i])q.push(i);while(!q.empty){intt=q.front;q.pop;top.push_back(t);for(inti=h[t];~i;i=ne[i]){intj=e[i];if(!--din[j])q.push(j);}}returntop.size==n;}intmain{int_;cin>>_;while(_--){memset(h,-1,sizeofh);idx=0;memset(din,0,sizeofdin);cin>>n;for(inti=1;i<=n;i++){intm;cin>>m;for(intj=1;j<=m;j++){intx;cin>>x;if(x>i)add(x,i,1);elseadd(x,i,0);din[i]++;}}if(!topsort)puts("-1");else{intans=0;memset(dp,0,sizeofdp);for(intnow:top){for(inti=h[now];~i;i=ne[i]){intj=e[i];dp[j]=max(dp[j],dp[now]+w[i]);}}for(inti=1;i<=n;i++)ans=max(ans,dp[i]);cout<
上一篇:打金传奇怎么退回主城,打金传奇怎么退回主城任务怎么样?
下一篇:合击传奇手游主播,合击传奇手游吧怎么样?
哈哈哈 子弹越打越多了
.
《刺客信条: 黑旗 记忆重置》回应DLC比本体贵: DLC非必须
当臭猫扶贫神秘嘉豪号主!
原神: 7.0奥黛塔定位反转! 并非木偶专属, 冰神设计成最大悬念
哪辆车能不被28吨钢卷压成废铁? 哪辆车能不被28吨钢卷压成废铁?
原神: 新超导木偶队顶配配装攻略! 告别刮痧与充能卡顿