先思考图上是\(tag\)的特殊情况。

考虑我们按拓扑序反过来操作,就可以得到我们任意想要的顺序。

那么我们把所有的图都缩点操作,那么我们只需要考虑一个联通分量里就行了。

一个联通分量最后只会剩下一个不可取的,我们只要判断这个就可以了。

那么按照权值大小排序,再一次判断是否可取即可。

#include<iostream>
#include<cstdio>
#include<stack>
#include<algorithm>
#define ll long long
#define N 500004 std::stack<int>QWQ; ll n,m,k; ll head[N],cnt,scc[N],siz[N],in[N]; struct P{
int to,next;
}e[N * 10]; inline void add(int x,int y){
e[++cnt].to = y;
e[cnt].next = head[x];
head[x] = cnt;
} struct E{
int w,id;
}p[N]; bool operator < (E a,E b){
return a.w > b.w;
} ll dfn[N],low[N],vis[N],dfncnt,sccnt; inline void tarjan(ll u){
dfn[u] = low[u] = ++dfncnt;
QWQ.push(u);
vis[u] = 1;
for(int i = head[u];i;i = e[i].next){
int v = e[i].to;
if(!dfn[v]){
tarjan(v);
low[u] = std::min(low[u],low[v]);
}else if(vis[v]){
low[u] = std::min(low[u],dfn[v]);
}
}
if(dfn[u] == low[u]){
++sccnt;
while(QWQ.top() != u){
scc[QWQ.top()] = sccnt;
siz[sccnt] ++ ;
vis[QWQ.top()] = 0;
QWQ.pop();
}
siz[sccnt] ++ ;
scc[QWQ.top()] = sccnt;
vis[QWQ.top()] = 0;
QWQ.pop();
}
} ll ans; int main(){
scanf("%lld%lld%lld",&n,&m,&k);
for(int i = 1;i <= n;++i)
scanf("%d",&p[i].w),p[i].id = i;
std::sort(p + 1,p + n + 1);
for(int i = 1;i <= m;++i){
ll x,y;
scanf("%lld%lld",&x,&y);
add(x,y);
}
for(int i = 1;i <= n;++i){
if(!dfn[i]){
tarjan(i);
}
}
for(int i = 1;i <= n;++i){
for(int j = head[i];j;j = e[j].next){
int v = e[j].to;
if(scc[v] != scc[i])
in[scc[v]] ++ ;
}
}
ll got = 0;
for(int i = 1;i <= n;++i){
int u = p[i].id;
if(in[scc[u]])
got ++ ,ans += p[i].w,siz[scc[u]] -- ;
else
if(siz[scc[u]] > 1)
got ++ ,ans += p[i].w,siz[scc[u]] -- ;
if(got == k)
break;
}
std::cout<<ans<<std::endl;
}

[yLOI2018] 锦鲤抄的更多相关文章

  1. P5008 [yLOI2018] 锦鲤抄(Tarjan+贪心)

    洛谷 题意: 给出一个有向图,每次可以删除存在入度的点及其出边,每次删除一个点可以获得其权值. 问最终能够获得的最大权值为多少. 思路: 考虑DAG:我们直接倒着拓扑序来选,即可将所有入度不为\(0\ ...

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

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

  3. zay大爷的神仙题目 D1T3-膜你抄

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

  4. 改编《OI抄》

    最近经历的事情比较多,网上常常流传着<锦鲤抄>修改版,于是就再修改了修改,就能唱起来了. 算是一种情怀吧. 请欣赏: OI抄 作词:某些dar佬 FYHSSGSS ssdfzhyf 作曲: ...

  5. WinterCamp2017吃饭睡觉记

    noip考完后励志好好学习进HE队然后Au,就这样每天勤奋刻苦发愤图强不知不觉就到冬令营了. 除了我之外的大佬们都是以上经历. 我呢……一个很爱浪的蒟蒻. 冬令营到了,伟大的CCF本着报一个录一个的原 ...

  6. [日常]蒟蒻的高一生活 Week 4

    啊啊啊好颓啊...石乐志 (药丸...最近更新的全都是日常了...(果然只做内部题效果滑稽)) 正在考虑把日常部分从科别体改成编日体(什么鬼)反正现在每天都能更新(x OI 整个一周 $dg$ 都没有 ...

  7. 【6.20校内test】

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

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

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

  9. NIOP 膜你题

    NOIp膜你题   Day1 duliu 出题人:ZAY    1.大美江湖(mzq.cpp/c) [题目背景] 细雪飘落长街,枫叶红透又一年不只为故友流连,其实我也恋长安听门外足音慢,依稀见旧时容颜 ...

随机推荐

  1. 7-Zip

    7-Zip https://www.7-zip.org/

  2. Python语法2

    目录 选择结构 循环结构 文件读写 函数 类和对象 选择结构 if,elif,else,使用时注意条件的先后顺序 通过缩进四个空格来区分代码块 # 从控制台输入 age = int(input(&qu ...

  3. 设计的MOS管三极管简单开关电路驱动能力不够1

    您需要 登录 才可以下载或查看,没有帐号?注册 x . ?& P' U5 r/ ~& `: B 用AOD409设计的开关电路为什么驱动能力不够,请大家帮忙分析一下原因啊.这个电路作用就 ...

  4. Spring Security:Authorization 授权(二)

    Authorization 授权 在更简单的应用程序中,身份验证可能就足够了:用户进行身份验证后,便可以访问应用程序的每个部分. 但是大多数应用程序都有权限(或角色)的概念.想象一下:有权访问你的面向 ...

  5. 用Python去除PDF水印

    今天介绍下用 Python 去除 PDF (图片)的水印.思路很简单,代码也很简洁. 首先来考虑 Python 如何去除图片的水印,然后再将思路复用到 PDF 上面. 这张图片是前几天整理<数据 ...

  6. 字典树(Trie)

    终于学会字典树了,真开心(然后就滚过来写总结了). 首先,字典树到底是个什么东西呢?请看下面这段话: 字典树,常被用来保存与查找大量的字符串,它利用了字符串之间的公共前缀来节约时间,但它的空间花费较大 ...

  7. JAVA笔记__窗体类/Panel类/Toolkit类

    /** * 窗体类 */ public class Main { public static void main(String[] args) { MyFrame m1 = new MyFrame() ...

  8. 前端---梳理 http 知识体系 1

    最近看了http相关的知识点,觉得还是有必要整理下,这样对自己的网络知识体系也有帮助. http 是什么 http叫超文本传输协议,可以拆成超文本.传输.协议来理解 协议 http 是一个用在计算机里 ...

  9. NOIP模拟92(多校25)

    前言 所以说这次是 HZOI 多校联测巅峰????(题目,数据过水??) T1 石子合并 解题思路 签到题. 发现我们可以给每个数字附一个正负号,每个数字的贡献就是它本身乘上这个符号. 发现至少应该有 ...

  10. Jenkins 邮件发送

    1.jenkins新建任务 2.配置svn 3.maven项目构建配置pom.xml 使用maven命令 clean test 构建前清除: 4.系统管理 => 插件管理 =>可选安装邮件 ...