首先如果这是一个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. 在Linux添加PYTHONPATH方法以及修改环境变量方法

    Linux下设置环境变量有三种方法,一种用于当前终端,一种用于当前用户,一种用于所有用户: 一:用于当前终端: 在当前终端中输入: export PATH=$PATH:<你的要加入的路径> ...

  2. 认识Debian

    Debian -- 通用操作系统https://www.debian.org/ DebianStretch - Debian Wikihttps://wiki.debian.org/DebianStr ...

  3. html5-attr和prop

    ###1.什么是attrbute和property attribute(attr) html标签的预定义属性 checked html标签的自定义属性         a eg: <input ...

  4. 在JavaEE中使用Mybatis框架

    MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录.每个MyB ...

  5. 转:Flutter Decoration背景设定(边框、圆角、阴影、形状、渐变、背景图像等)

    1 继续关系: BoxDecoration:实现边框.圆角.阴影.形状.渐变.背景图像 ShapeDecoration:实现四个边分别指定颜色和宽度.底部线.矩形边色.圆形边色.体育场(竖向椭圆).  ...

  6. CentOS7 网络NAT模式

    问题:安装完毕ping命令不能用,然后改为桥接模式,ping可以用. 先了解桥接,NAT 的含义. 桥接:在bridged模式下,VMWare虚拟出来的操作系统就像是局域网中的一台独立的主机,它可以访 ...

  7. @Autowired 与@Resource的区别(详细)

    参考:@Autowired 与@Resource的区别(详细) spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource.@Pos ...

  8. PHPCMS的使用

    1.下载安装phpcms 下载完后解压将install_packages上传到服务器并重命名为phpcms_test: 更改目录文件系统权限: chmod -R 777 phpcms_test 配置n ...

  9. 使用chcache 缓存

    在项目里碰到了表单提交和ajax访问后台取到的request对象不是同一个对象,所以不能够资源共享,问了大神决定配置一个缓存来处理这个问题. 引用jar :ehcache-core-2.5.2.jar ...

  10. 各个版本spring的jar包以及源码下载地址,目前最高版本到spring4.3.8,留存备用:

    http://maven.springframework.org/release/org/springframework/spring/