先思考图上是\(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. k8s replicaset controller分析(2)-核心处理逻辑分析

    replicaset controller分析 replicaset controller简介 replicaset controller是kube-controller-manager组件中众多控制 ...

  2. 回应:Alpha深度评测

    零.说明 本篇博客是针对博客沉舟侧畔千帆过,病树前头万木春--对[题士]产品的深度测评与解析的回应,用以说明『题士』开发团队的观点.改进计划等 感谢HansBug.CookieLau助教及各位老师.测 ...

  3. 第2次 Beta Scrum Meeting

    本次会议为Beta阶段第2次Scrum Meeting会议 会议概要 会议时间:2021年5月31日 会议地点:「腾讯会议」线上进行 会议时长:0.5小时 会议内容简介:对完成工作进行阶段性汇报:对下 ...

  4. 技术博客——微信小程序的架构与原理

    技术博客--微信小程序的架构与原理 在两个月的微信小程序开发过程中,我曾走了不少弯路,也曾被很多现在看来十分可笑的问题所困扰.这些弯路与困扰,基本上都是由于当时对小程序的架构理解不够充分,对小程序的原 ...

  5. 【二食堂】Alpha - Scrum Meeting 8

    Scrum Meeting 8 例会时间:4.18 11:40 - 12:10 进度情况 组员 昨日进度 今日任务 李健 1. 实体的添加和关系的添加实现的有bug,柴博和刘阳进行了帮助issue 1 ...

  6. [luogu2973]driving out the piggies 驱逐猪猡【高斯消元+概率DP】

    看到题面的那一刻,我是绝望的ORZ 图论加概率期望加好像不沾边的高斯消元???我人直接傻掉 还没学过概率期望的我果断向题解屈服了(然后还是傻掉了两节课来找线性方程.. Description 奶牛们建 ...

  7. 查找最小生成树:克鲁斯克尔算法(Kruskal)算法

    一.算法介绍 Kruskal算法是一种用来查找最小生成树的算法,由Joseph Kruskal在1956年发表.用来解决同样问题的还有Prim算法和Boruvka算法等.三种算法都是贪心算法的应用.和 ...

  8. SpringBoot教程(学习资源)

    SpringBoot教程 SpringBoot–从零开始学SpringBoot SpringBoot教程1 SpringBoot教程2 --SpringBoot教程2的GitHub地址 SpringB ...

  9. SpringCloud微服务实战——搭建企业级开发框架(十五):集成Sentinel高可用流量管理框架【熔断降级】

      Sentinel除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一.由于调用关系的复杂性,如果调用链路中的某个资源不稳定,最终会导致请求发生堆积.Sentinel ...

  10. 手把手从0到1:搭建Kubernetes集群

    搭建 k8s 集群网上很多教程,如果是手工部署或者实验环境可以直接使用 MiniKube 或者 Kind,来在本地启动简单的 Kubernetes 集群进行后面的学习即可.如果是使用 MiniKube ...