luogu5008 逛庭院 (tarjan缩点)
首先如果这是一个DAG,我按照拓扑序倒着去选,一定能选到所有入度不为0的点
然后考虑有环的情况 我们拎出来一个强连通分量 先假设它缩点以后是没有入度的
那我最后它里面一定至少剩一个不能选 因为就剩一个的时候肯定没有入度呀
那我显然可以把它看成是一个只有一个点入度为0的DAG 而且那个入度为0的点可以任选 那就是刚才的结论了
如果它缩点以后有入度 那它就整个都能选了
所以就缩点以后把每个入度为0的点内权值最小的那个去掉 最后取前k大的就行了
这里有一个trick:可以用nth_element找到第k大 然后扫一遍把所有大于它的都加上,是O(n)的
然而并不需要2333
#include<bits/stdc++.h>
#define CLR(a,x) memset(a,x,sizeof(a))
using namespace std;
typedef long long ll;
typedef pair<int,int> pa;
const int maxn=5e5+,maxm=2e6+; inline ll rd(){
ll x=;char c=getchar();int neg=;
while(c<''||c>''){if(c=='-') neg=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-'',c=getchar();
return x*neg;
} int eg[maxm][],egh[maxn],ect;
int N,M,K,dfn[maxn],tot,low[maxn],stk[maxn],sh,bel[maxn],pct;
int lst[maxn],v[maxn];
bool instk[maxn],ine[maxn]; inline void adeg(int a,int b){
eg[++ect][]=b,eg[ect][]=egh[a],egh[a]=ect;
} void tarjan(int x){
dfn[x]=low[x]=++tot;
instk[x]=,stk[++sh]=x;
for(int i=egh[x];i;i=eg[i][]){
int b=eg[i][];
if(!dfn[b]) tarjan(b),low[x]=min(low[x],low[b]);
else if(instk[b]) low[x]=min(low[x],dfn[b]);
}
if(low[x]==dfn[x]){
++pct;
int mi=;
while(){
bel[stk[sh]]=pct;
instk[stk[sh]]=;
if(v[stk[sh]]<mi) mi=v[stk[sh]],lst[pct]=stk[sh];
if(stk[sh--]==x) break;
}
}
} int main(){
//freopen("","r",stdin);
int i,j,k;
N=rd(),M=rd(),K=rd();
for(i=;i<=N;i++) v[i]=rd();
for(i=;i<=M;i++){
int a=rd(),b=rd();
adeg(a,b);
}
for(i=;i<=N;i++)
if(!dfn[i]) tarjan(i);
for(i=;i<=N;i++){
for(j=egh[i];j;j=eg[j][]){
if(bel[eg[j][]]!=bel[i])
ine[bel[eg[j][]]]=;
}
}
for(i=;i<=pct;i++){
if(!ine[i]) v[lst[i]]=;
}
sort(v+,v+N+);
int ans=;
for(i=N;i>=N-K+;i--)
ans+=v[i];
printf("%d\n",ans);
return ;
}
luogu5008 逛庭院 (tarjan缩点)的更多相关文章
- [luogu5008]逛庭院
首先我们看到数据范围.妈耶!数据这么大,一开始还想用个DP来做,但是看着就不行,那么根据这个数据范围,我们大致可以猜到这道题的算法是一个贪心,那么我们怎么贪呢? 我们首先还是先画一个图: 样例解释一下 ...
- 【洛谷P5008 逛庭院】tarjan缩点+贪心
既然没有题解,那么我就来提供给一份. -- 首先我们看到数据范围.妈耶!数据这么大,一开始还想用个DP来做,但是看着就不行,那么根据这个数据范围,我们大致可以猜到这道题的算法是一个贪心,那么我们怎么贪 ...
- 【洛谷5008】逛庭院(Tarjan,贪心)
[洛谷5008]逛庭院(Tarjan,贪心) 题面 洛谷 题解 如果图是一个\(DAG\),我们可以任意选择若干个不是入度为\(0\)的点,然后把它们按照拓扑序倒序删掉,不难证明这样一定是合法的. 现 ...
- hihoCoder 1185 连通性·三(Tarjan缩点+暴力DFS)
#1185 : 连通性·三 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 暑假到了!!小Hi和小Ho为了体验生活,来到了住在大草原的约翰家.今天一大早,约翰因为有事要出 ...
- POJ 1236 Network of Schools(Tarjan缩点)
Network of Schools Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 16806 Accepted: 66 ...
- King's Quest —— POJ1904(ZOJ2470)Tarjan缩点
King's Quest Time Limit: 15000MS Memory Limit: 65536K Case Time Limit: 2000MS Description Once upon ...
- 【BZOJ-2438】杀人游戏 Tarjan + 缩点 + 概率
2438: [中山市选2011]杀人游戏 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1638 Solved: 433[Submit][Statu ...
- 【BZOJ-1924】所驼门王的宝藏 Tarjan缩点(+拓扑排序) + 拓扑图DP
1924: [Sdoi2010]所驼门王的宝藏 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 787 Solved: 318[Submit][Stat ...
- 【BZOJ-1797】Mincut 最小割 最大流 + Tarjan + 缩点
1797: [Ahoi2009]Mincut 最小割 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1685 Solved: 724[Submit] ...
随机推荐
- mysql 5.7:show_compatibility_56
show_compatibility_56 - rudy gao - CSDN博客 https://blog.csdn.net/rudygao/article/details/50403107 [SO ...
- oracle事务的四个特性(ACID)
事务产生的背景 当在PL/SQL中同时操作多个SQL语句,比如通过DML语句添加.修改或删除数据时,如何确保数据库数据不会因为意外而倒置错误数据是一个非常重要的问题. 以仓库发料系统为例,如果某一张领 ...
- css3 text-shadow字体阴影讲解
text-shadow:为字体添加阴影, 可以通过对text-shadow属性设置相关的属性值,来实现现一些需要的字体阴影效果,减少了图片的使用. 基础说明: text-shadow: X轴 ...
- JSON Support in PostgreSQL and Entity Framework
JSON 和JSONB的区别(What's difference between JSON and JSONB data type in PosgresSQL?) When should be use ...
- Django Rest framework 框架之认证使用和源码执行流程
用这个框架需要先安装: pip3 install djangorestframework 如果写了一个CBV的东西,继承了View. # 继承Django里面View class APIView(Vi ...
- 关于js的书写
<li> <label>工号:</label> <input id="uidarr" type='text' onclick=" ...
- python爬虫之Beautiful Soup的基本使用
1.简介 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: Beautiful Soup提供一些简单的.python式的函数用来处理导航.搜索 ...
- 销售合同金额数据从Excel导入
一.业务需求 1.新增了销售合同金额的字段,但是老数据没有这个字段:所以销售合同金额从销售合同附件的各品种金额之和. 2.制作好excel字段模板,将此模板发送给销售业务部门来统计并完成excel表格 ...
- PLSQL过期:Your trial period for PL/SQL Developer is over .If you want to continue using this software ,you must purchase the retail version.
PLSQL过期:Your trial period for PL/SQL Developer is over .If you want to continue using this software ...
- vue-cli: render:h => h(App)是什么意思
import Vue from 'vue' import App from './App.vue' Vue.config.productionTip = false new Vue({ render: ...