首先如果这是一个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缩点)的更多相关文章

  1. [luogu5008]逛庭院

    首先我们看到数据范围.妈耶!数据这么大,一开始还想用个DP来做,但是看着就不行,那么根据这个数据范围,我们大致可以猜到这道题的算法是一个贪心,那么我们怎么贪呢? 我们首先还是先画一个图: 样例解释一下 ...

  2. 【洛谷P5008 逛庭院】tarjan缩点+贪心

    既然没有题解,那么我就来提供给一份. -- 首先我们看到数据范围.妈耶!数据这么大,一开始还想用个DP来做,但是看着就不行,那么根据这个数据范围,我们大致可以猜到这道题的算法是一个贪心,那么我们怎么贪 ...

  3. 【洛谷5008】逛庭院(Tarjan,贪心)

    [洛谷5008]逛庭院(Tarjan,贪心) 题面 洛谷 题解 如果图是一个\(DAG\),我们可以任意选择若干个不是入度为\(0\)的点,然后把它们按照拓扑序倒序删掉,不难证明这样一定是合法的. 现 ...

  4. hihoCoder 1185 连通性·三(Tarjan缩点+暴力DFS)

    #1185 : 连通性·三 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 暑假到了!!小Hi和小Ho为了体验生活,来到了住在大草原的约翰家.今天一大早,约翰因为有事要出 ...

  5. POJ 1236 Network of Schools(Tarjan缩点)

    Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 16806   Accepted: 66 ...

  6. King's Quest —— POJ1904(ZOJ2470)Tarjan缩点

    King's Quest Time Limit: 15000MS Memory Limit: 65536K Case Time Limit: 2000MS Description Once upon ...

  7. 【BZOJ-2438】杀人游戏 Tarjan + 缩点 + 概率

    2438: [中山市选2011]杀人游戏 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1638  Solved: 433[Submit][Statu ...

  8. 【BZOJ-1924】所驼门王的宝藏 Tarjan缩点(+拓扑排序) + 拓扑图DP

    1924: [Sdoi2010]所驼门王的宝藏 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 787  Solved: 318[Submit][Stat ...

  9. 【BZOJ-1797】Mincut 最小割 最大流 + Tarjan + 缩点

    1797: [Ahoi2009]Mincut 最小割 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1685  Solved: 724[Submit] ...

随机推荐

  1. asp.net core发布到linux

    在发布到linux的过程中出现两个问题现在总结一下: 我的虚拟机是安装到本机上面的,所以,应该在虚拟机的设置里面设置端口映射.具体设置如下: 选择vm上方的编辑 在弹出的框中选择VMnet8,点击下方 ...

  2. IIS下载地址

    https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=1038

  3. Java多线程4:Thread中的静态方法

    一.Thread类中的静态方法 Thread类中的静态方法是通过Thread.方法名来调用的,那么问题来了,这个Thread指的是哪个Thread,是所在位置对应的那个Thread嘛?通过下面的例子可 ...

  4. 莫烦theano学习自修第三天【共享变量】

    1. 代码实现 #!/usr/bin/env python #! _*_ coding:UTF-8 _*_ import numpy as np import theano.tensor as T i ...

  5. python数学第四天【古典概型】

  6. QTP 自动化测试--点滴 获取datatable数值/dafault文件位置

    0 设置default.xls文件位置 右键项目-settings-resources-datatable-选择 数据表的位置如图 心得:同一个项目-分成多个测试项目-这些测试项目可以共用同一张数据表 ...

  7. dbexpress连接mysql提示Operation not allowed on a unidirectional dataset

    最近刚接触delphi,在了解到dbExpress连接mysql的时候,出现了一些问题,特记录下 我遇到的问题有两个 1. TDBGrid --DataSet=TDataSource1 TDataSo ...

  8. Tembin

    1:组织机构和用户之间是多对一的关系,一个组织结构可以有多个成员,一个成员只能属于一个组织机构. 2:app里面的邀请成员:是邀请发送短信通知用户注册tembin账户,当用户去注册的时候下面就会显示所 ...

  9. Windows & RabbitMQ:安装

    可以参考:在 Windows 上安装Rabbit MQ 指南 本文RabbitMQ版本为3.6.1 Step 1:安装Erlang Step 2:安装RabbitMQ Step 3:启用Managem ...

  10. React Router 4.0 基本使用

    路由的概念,起初来源于服务端,就是当浏览器访问一个网站的不同页面时,服务端能够正确的返回页面的内容.当访问首页时,它能返回首页的内容,访问关于我们页面时,返回关于我们的内容.可以看到路由就是一种控制和 ...