[yLOI2018] 锦鲤抄
先思考图上是\(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] 锦鲤抄的更多相关文章
- P5008 [yLOI2018] 锦鲤抄(Tarjan+贪心)
洛谷 题意: 给出一个有向图,每次可以删除存在入度的点及其出边,每次删除一个点可以获得其权值. 问最终能够获得的最大权值为多少. 思路: 考虑DAG:我们直接倒着拓扑序来选,即可将所有入度不为\(0\ ...
- 6.20校内考试整理——大美江湖&&腐草为萤&&锦鲤抄题解
先安利一下题目作者:一扶苏一 先看第一题: 这道题就是一道简单的模拟题,只要不管一开始的位置,模拟移动与格子对应的触发事件就行了.话不多说,看代码: #include<iostream> ...
- zay大爷的神仙题目 D1T3-膜你抄
依旧是外链 锦鲤抄 [题目背景] 你在尘世中辗转了千百年 却只让我看你最后一眼 火光描摹容颜燃尽了时间 别留我一人,孑然一身 凋零在梦境里面. ——银临&云の泣<锦鲤抄> [问题描 ...
- 改编《OI抄》
最近经历的事情比较多,网上常常流传着<锦鲤抄>修改版,于是就再修改了修改,就能唱起来了. 算是一种情怀吧. 请欣赏: OI抄 作词:某些dar佬 FYHSSGSS ssdfzhyf 作曲: ...
- WinterCamp2017吃饭睡觉记
noip考完后励志好好学习进HE队然后Au,就这样每天勤奋刻苦发愤图强不知不觉就到冬令营了. 除了我之外的大佬们都是以上经历. 我呢……一个很爱浪的蒟蒻. 冬令营到了,伟大的CCF本着报一个录一个的原 ...
- [日常]蒟蒻的高一生活 Week 4
啊啊啊好颓啊...石乐志 (药丸...最近更新的全都是日常了...(果然只做内部题效果滑稽)) 正在考虑把日常部分从科别体改成编日体(什么鬼)反正现在每天都能更新(x OI 整个一周 $dg$ 都没有 ...
- 【6.20校内test】
反正考的不是很好吧,赶脚炸了啊qwq 然后这两天一直在忙一些神奇的事情,所以没有整理完 手动@water_lift T1:大美江湖: [题目背景] 细雪飘落长街,枫叶红透又一年 不只为故友流连,其实我 ...
- 校内考试之zay与银临(day1)
T1大美江湖(洛谷P5006) zayの题解: 这个题的本质是模拟 不过有卡ceil的地方 ceil是对一个double进行向上取整,而对于int/int来说,返回值是int 举个生动的栗子 ceil ...
- NIOP 膜你题
NOIp膜你题 Day1 duliu 出题人:ZAY 1.大美江湖(mzq.cpp/c) [题目背景] 细雪飘落长街,枫叶红透又一年不只为故友流连,其实我也恋长安听门外足音慢,依稀见旧时容颜 ...
随机推荐
- 【二食堂】Beta - Scrum Meeting 7
Scrum Meeting 7 例会时间:5.19 18:30~18:50 进度情况 组员 当前进度 今日任务 李健 1. 文本区域的前后端对接完成,bug已经修复issue2. 自定义关系的添加与删 ...
- OO第四单元及学期总结
OO第四单元及学期总结 第四单元两次作业的架构设计 第一次作业 类图: 树形结构:使用Operation类管理UMLOperation以及parent为该UMLOperation的参数(UMLpara ...
- 一文带你掌握【TCP拥塞窗口】原理
❝ 关注公众号:高性能架构探索.后台回复[资料],可以免费领取 ❞ 学过网络相关课程的,都知道TCP中,有两个窗口: 滑动窗口(在我们的上一篇文章中有讲),接收方通过通告发送方自己的可以接受缓冲区大小 ...
- Oracle 11g 新建用户
create user XXXuser identified by XXXpassword;--创建用户XXXuser,设置初始密码XXXpassword alter user XXXuser ide ...
- python write() argument must be str, not bytes
python pickle from __future__ import absolute_import from __future__ import division from __future__ ...
- 盘点 GitHub 年度盛会|附视频
「Universe 2021」是 GitHub 于今年举办的开发者盛会,本次 Universe 2021 大会采用线上直播模式,为期两天已于上周落下帷幕. 这是 GitHub 举办的一年一度开发者盛会 ...
- docker 加入域名
先运行docker镜像 # 进入 docker 容器 mynginx 是容器名 docker exec -i -t mynginx /bin/bash #安装vim apt-get install v ...
- SQL注入之猫舍之sqlmap的使用
先说一下最常用的基础指令 -u 指定注入点(一般为url栏的网址) --dbs 跑库名 --tables 跑表名 --columns 跑字段名 --dump 枚举数据(高危指令,容易进去) -D 库名 ...
- 一个疏忽损失惨重!就因为把int改成Integer,第2天被辞了
1 故事背景 一个程序员就因为改了生产环境上的一个方法参数,把int型改成了Integer类型,因为涉及到钱,结果上线之后公司损失惨重,程序员被辞退了.信不信继续往下看.先来看一段代码: public ...
- [python]RobotFramework自定义库实现UI自动化
1.安装教程 环境搭建不多说,网上资料一大堆,可参考https://www.cnblogs.com/puresoul/p/3854963.html,写的比较详细,值得推荐.目前python3是不支持r ...