是否有环往往很大程度上影响着一道关于图的问题。
描述 Description(Time Limit: 1s ; Memory Limit 128MB)
有n个炸弹,有些炸弹牵了一根单向引线(也就是说引线只有在这一端能被炸弹点燃),只要引爆了这个炸弹,用引线连接的下一个炸弹也会爆炸。每个炸弹还有个得分,当这个炸弹被引爆后就能得到相应得分。
现在要你引爆k个炸弹,使得分最大。
输入格式 InputFormat
第1行两个整数n、k。
接下来n行每行两个整数a[i]、b[i]。a[i]表示这个炸弹用引线连接的下一个炸弹,如果a[i]为0,则表示这个炸弹没连接引线。b[i]表示这个炸弹的得分。
输出格式 OutputFormat
仅一个数,表示最大得分。
样例输入 SampleInput
8 2
0 1
1 1
2 100
2 100
0 1
5 1
6 2
6 2
样例输出 SampleOutput
202
数据范围和注释 Hint
1≤b[i]≤1000000
对于30%的数据,n≤1000 k≤30
对于60%的数据,n≤50000 k≤100
对于100%的数据,n≤200000 k≤500
这个题有没有环呢?
我们的数据里没有。
因此就可以预处理出所有 叶子节点 的最大连锁爆炸值,然后降序排序;
接着按顺序对每个连锁爆炸进行处理:如果它的连锁爆炸过程中有之前已经爆炸过的炸弹,就减掉这颗炸弹的爆炸值;否则把这颗炸弹标记为已爆炸。
然后再排一遍序,从大到小记录k个值的和,输出即可。(要开long long 啊)
<span style="font-size:18px;"><strong>#include<cstdio>
#include<cstring>
#include<cstdlib&g