正题

题目链接:https://www.luogu.com.cn/problem/P5008


题目大意

给出nnn个点mmm条边的一张有向无环图,你每次可以选择一个有入度的点获取其点权然后删除这个点。求能取kkk次的情况下最大能获得的权值和。

1≤n≤5×105+4,1≤m≤2×106+41\leq n\leq 5\times 10^5+4,1\leq m\leq 2\times 10^6+41≤n≤5×105+4,1≤m≤2×106+4


解题思路

先考虑DAGDAGDAG怎么做,很显然的我们可以通过调整选择顺序做到只有入度为000的点不能选择,其他都任意选择。

然后如果有强连通分量的话,同理我们考虑一个环,发现环上只有一个点不能够被选择,而如果这个环本身就有一个入度那么显然所有点都可以任意选择。

而如果是入度为000的强连通我们直接删掉权值最小的点不能选择就好了。

然后排序乱选。

时间复杂度:O(nlog⁡n+m)O(n\log n+m)O(nlogn+m)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stack>
using namespace std;
const int N=5e5+10,M=2e6+10;
struct node{int to,next;
}a[M];
int n,m,k,tot,cnt,ans,in[N],w[N],v[N];
int d[N],col[N],ls[N],dfn[N],low[N];
bool ins[N];stack<int> s;
void addl(int x,int y){a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;return;
}
void tarjan(int x){dfn[x]=low[x]=++cnt;ins[x]=1;s.push(x);for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(!dfn[y]){tarjan(y);low[x]=min(low[x],low[y]);}else if(ins[y])low[x]=min(low[x],dfn[y]);}if(dfn[x]==low[x]){while(s.top()!=x){w[x]=min(w[x],w[s.top()]);col[s.top()]=x;ins[s.top()]=0;s.pop();}col[x]=x;ins[x]=0;s.pop();}return;
}
int main()
{scanf("%d%d%d",&n,&m,&k);for(int i=1;i<=n;i++)scanf("%d",&w[i]),v[i]=w[i];for(int i=1,x,y;i<=m;i++)scanf("%d%d",&x,&y),addl(x,y);for(int i=1;i<=n;i++)if(!dfn[i])tarjan(i);for(int x=1;x<=n;x++)for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(col[x]==col[y])continue;in[col[y]]++;}int _=0;for(int i=1;i<=n;i++)if(col[i]==i&&!in[i])d[++_]=w[i];sort(d+1,d+1+_);sort(v+1,v+1+n);for(int i=n;i>=1;i--){if(d[_]==v[i]){_--;continue;}k--;ans+=v[i];if(!k)break;}printf("%d\n",ans);return 0;
}

P5008-[yLOI2018]锦鲤抄【tarjan】相关推荐

  1. [yLOI2018] 锦鲤抄

    题目 题目背景 你在尘世中辗转了千百年, 却只让我看你最后一眼. 火光描摹容颜燃尽了时间, 别留我一人,孑然一身,凋零在梦境里面. -- 银临 & 云の泣<锦鲤抄> 本题原名< ...

  2. 【yLOI2018】锦鲤抄

    题面 https://www.luogu.org/problem/P5008 题解 为了带入氛围还把$QQ$音乐里的<锦鲤抄>点开听了听. 让我们想想删除的顺序是什么样子的:最优的顺序一定 ...

  3. 计算机音乐锦鲤抄,锦鲤抄 MIDI File Download :: MidiShow

    Introduction 锦鲤抄midi "锦鲤抄" is a MIDI music piece in Classical Music style, played by Acous ...

  4. 6.20校内考试整理——大美江湖腐草为萤锦鲤抄题解

    先安利一下题目作者:一扶苏一 先看第一题: 这道题就是一道简单的模拟题,只要不管一开始的位置,模拟移动与格子对应的触发事件就行了.话不多说,看代码: 1 #include<iostream> ...

  5. 使用python 定时发送微信信息给喜欢的人

    原创 使用python 定时发送微信信息给喜欢的人 2019-11-08 16:34:18 冒牌技术小哥 阅读数 171 文章标签: python 更多 分类专栏: python 版权声明:本文为博主 ...

  6. tarjan习题题解

    tarjan习题 一.割点: 1.模板: 洛谷P3388 [模板]割点(割顶) 题目背景 割点 题目描述 给出一个n个点,m条边的无向图,求图的割点. 输入输出格式 输入格式: 第一行输入n,m 下面 ...

  7. 校内考试之zay与银临(day1)

    T1大美江湖(洛谷P5006) zayの题解: 这个题的本质是模拟 不过有卡ceil的地方 ceil是对一个double进行向上取整,而对于int/int来说,返回值是int 举个生动的栗子 ceil ...

  8. 【6.20校内test】

    反正考的不是很好吧,赶脚炸了啊qwq 然后这两天一直在忙一些神奇的事情,所以没有整理完 手动@water_lift T1:大美江湖: [题目背景] 细雪飘落长街,枫叶红透又一年 不只为故友流连,其实我 ...

  9. 【NOI2022】PV「什么是信息学精神?」

    [NOI2022]PV「什么是信息学精神?」 [NOI2022]PV「什么是信息学精神?」_哔哩哔哩_bilibili [最美教师]徐先友老师:用10年带出一支信息学强队 [最美教师]徐先友老师:用1 ...

最新文章

  1. Curator counters
  2. OpenGL+VS2015+WIN10 demo
  3. 2017.04.02【NOIP 普及组】模拟赛C组 T1:区间
  4. Scala 类中声明方法
  5. leetcode刷题日记-转换成小写字母
  6. C++ 多线程系统编程精要
  7. 光线微弯传感器matlab仿真,光纤压力与位移传感特性
  8. turbo码书籍推荐
  9. ubuntu安装无线网卡驱动(Ralink)
  10. c 语言实现链表反转(超详细,有手就行)
  11. 最新行政区划省市区镇街道村 导入数据库 MYSQL (2021年4月 )
  12. Python实现抓取CSDN热门文章列表
  13. Java常用环境配置(Maven、Mybatis、Spring、SpringMvc、Mybatis)
  14. 互联网大佬纷纷搞养殖,这是为哪般~~~
  15. python import random 报错_导致python中import错误的原因是什么
  16. 逆幂律模型_为“成功”建模:幂律分布
  17. 【法规】投标申请人资格预审须知-刘俊平
  18. 照片相框软件有什么?照片相框怎么加技巧分享
  19. python中整数的长度_Python中正整数的位长度
  20. 【论文翻译】文本语义提取

热门文章

  1. easyui 修改单元格内容_初学Excel办公软件快速修改文字的方法
  2. 数字怎么横 竖排_从这些数字更深入了解打包箱房
  3. 学计算机要买什么样的电脑,大学开学要买电脑吗?又要买什么样的电脑?看准这些再买也不迟!...
  4. mysql group_concat去重_MySQL group_concat() 函数用法
  5. android 获取app自启动权限状态_央视批手机App权限问题:频繁自启动 搜集个人隐私触目惊心...
  6. php文件上传实验总结,53 PHP文件处理(六)文件上传--总结---细说php
  7. access 战地1不加入ea_炒牛肉时,想要牛肉嫩滑又不老,只需加入1样东西,很多人都不懂...
  8. react 最佳入门_miaov-React 最佳入门
  9. 楚乔传手游 服务器维护,楚乔传手游网络异常进不去游戏怎么办?楚乔传网络异常解决方法...
  10. linux应用与管理,Linux操作系统应用与管理