题目

好妙,可以用拓扑排序去做。

首先我们要明白,我们先统计正数的,再去统计负数,这么做是最优的。正数的话,加上去另个一个数,一定会使得答案更优,而且题目说保证不会成环,所以拓扑排序是可以的。然后我们对负数的处理就是,按照拓扑序逆序处理。因为负数无论加到哪里,都会使得答案变差,按照拓扑序逆序,可以防止负数加到另一个数,具体细节看代码吧。

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<map>
#include<vector>
#include<list>
#include<queue>
#define int long long
using namespace std;
int n,a[200005],b[200005],ru[200005],ans=0,v1[200005],v2[200005],cnt1,cnt2;
list<int>lis[200005];
queue<int>q;
signed main()
{cin>>n;for(int i=1;i<=n;i++){scanf("%lld",&a[i]);}for(int i=1;i<=n;i++){scanf("%lld",&b[i]);if(b[i]==-1)continue;lis[i].push_back(b[i]);ru[b[i]]++;}for(int i=1;i<=n;i++){if(!ru[i])q.push(i);}while(!q.empty()){int x=q.front();q.pop();ans+=a[x];for(list<int>::iterator it=lis[x].begin();it!=lis[x].end();it++){ru[*it]--;if(!ru[*it])q.push(*it);if(a[x]>0)a[*it]+=a[x];}if(a[x]>=0)v1[++cnt1]=x;else v2[++cnt2]=x;}cout<<ans<<endl;for(int i=1;i<=cnt1;i++){printf("%lld ",v1[i]);}for(int i=cnt2;i>=1;i--){printf("%lld ",v2[i]);}
}

codeforces 660 div2 D相关推荐

  1. codeforces#320(div2) D Or Game 贪心

    codeforces#320(div2) D  "Or" Game  贪心 D. "Or" Game time limit per test 2 seconds ...

  2. codeforces 628.div2

    # Codeforces 628.div2 A. EhAb AnD gCd B. CopyCopyCopyCopyCopy C. Ehab and Path-etic MEXs D. Ehab the ...

  3. codeforces#324(div2) E. Anton and Ira 贪心

    codeforces#324(div2) E. Anton and Ira  贪心 E. Anton and Ira time limit per test 1 second memory limit ...

  4. codeforces 712 div2 ABC

    codeforces 712 div2 ABC A. Déjà Vu A palindrome is a string that reads the same backward as forward. ...

  5. codeforces round div2,3周赛补题计划(从开学到期末)

    1. 本学期场次 从2020.09.19-2021.01.18,一共18周. 题号 场次 日期 备注 1475 Codeforces Round #697 (Div. 3) 1.25 1474 Cod ...

  6. Codeforces#371 Div2

    这是一场非常需要总结的比赛,交了3题,最后终测的时候3题全部没过,一下掉到了绿名,2333 Problem A 题意:给定区间[l1,r1],[l2,r2],然后给定一个整数k,求区间当中相交的元素, ...

  7. 【Codeforces #130 Div2】Solutions

    [208A  Dubstep] http://codeforces.ru/problemset/problem/208/A 题目大意:一个句子被添加了若干"WUB",问原句. 将W ...

  8. 付忠庆的练习小笔记-Codeforces #277 Div2 C

    原题链接 http://codeforces.com/contest/486/problem/C 这个C题显然更水一些 步数可以分为两种 上下一种 左右一种 总步数最小 = 上下最小+左右最小 先讨论 ...

  9. 付忠庆的练习小笔记-Codeforces #276 Div2 C

    原题链接 http://codeforces.com/contest/485/problem/C 题意:给出一个区间 l~r 求这个区间内的数中转换成2进制含'1'最多的数,若有多组解,则输出最小的那 ...

最新文章

  1. 开发日记-20190719 关键词 读书笔记《Linux 系统管理技术手册(第二版)》DAY 12
  2. WebRTC视频编解码器性能评估
  3. 排队问题解题思路_青岛版二年级数学下册8.2除加除减解决问题微课视频辅导+练习...
  4. Python学习——常见的字符串匹配
  5. Eclipse的Ctrl+Shift+R中过滤文件类型
  6. 64位ubuntu12 编译android4.4.2
  7. ERROR: libass not found using pkg-config2
  8. 掌财社:传联想控股收身而退 放弃参与高盛投行计划
  9. STAMP:扩增子、宏基因组统计分析神器(中文帮助文档)
  10. 微型计算机中的西文字符编码,在微型计算机中,应用最普遍的西文字符编码是什...
  11. 郑州大学计算机专业国际学院,郑州大学国际学院怎么样?郑州大学国际学院好吗?(历年分数、专业设置、校园环境、教学实力、名人校友) - 职友集...
  12. 文明5 java 英_文明5模组“Future Worlds”(未来世界)中英版补丁
  13. 小女子做销售 四大温柔手段
  14. win10多任务处理快捷键
  15. ST电机库v5.4.4源代码分析(7): SpeednPosFdbk_Handle_t在几个结构体中的关系
  16. void指针(void*):void*存放任意对象的地址、通过(int*)a转换指针类型
  17. @Alias使用技巧
  18. 语音识别 - ASR whisper
  19. 微信小程序中的onLoad
  20. android mvvm官方文档,MVVM: 这是一个android MVVM 框架,基于谷歌dataBinding技术实现

热门文章

  1. steam无法显示成人内容_显示Steam游戏的FPS
  2. 扁鹊三兄弟——电脑永远无法取代的正确判断
  3. Python随机选择Maya场景元素
  4. 【Linux】用户权限——命令大全
  5. html弹窗显示表格,js弹框表格,获取数据添加进去dom里面
  6. 前端——》JS检测非法字符
  7. Android自定义View系列之进度指示控件
  8. 【机器学习】带你轻松理解什么是强化学习中的状态动作函数 ?
  9. 下 终端_营销数字化能力建设:卡姿兰如何打造线上线下一体化,赋能终端?...
  10. vue 饿了么ui 日期选择器 修改样式