#Tarjan#洛谷 4819 [中山市选]杀人游戏
分析
缩点后显然只考虑入度为0的点的个数,
但是问题是如果有一个入度为0的点缩点前只有1个点
且它的出边上的所有点都可以被其它入度为0的点遍历,
那么可以将其它点全部排除后剩下的这个点就是凶手,概率要加1
代码
#include <cstdio>
#include <cctype>
#include <map>
#include <stack>
#define rr register
using namespace std;
const int N=100011; struct node{int y,next;}e[N*5],E[N*5]; stack<int>stac; map<int,bool>uk[N];
int dfn[N],low[N],v[N],col[N],deg[N],as[N],hs[N],siz[N],m,ans,flag,Et,tot,cnt,n;
inline signed iut(){
rr int ans=0,f=1; rr char c=getchar();
while (!isdigit(c)) f=(c=='-')?-f:f,c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans*f;
}
inline signed min(int a,int b){return a<b?a:b;}
inline void tarjan(int x){
dfn[x]=low[x]=++tot,
stac.push(x),v[x]=1;
for (rr int i=as[x];i;i=e[i].next)
if (!dfn[e[i].y]){
tarjan(e[i].y);
low[x]=min(low[x],low[e[i].y]);
}else if (v[e[i].y])
low[x]=min(low[x],dfn[e[i].y]);
if (dfn[x]==low[x]){
rr int y; ++cnt;
do{
y=stac.top(),stac.pop(),
col[y]=cnt,v[y]=0,++siz[cnt];
}while (x^y);
}
}
signed main(){
n=iut(),m=iut();
for (rr int i=1;i<=m;++i){
rr int x=iut(),y=iut();
e[i]=(node){y,as[x]},as[x]=i;
}
for (rr int i=1;i<=n;++i)
if (!dfn[i]) tarjan(i);
for (rr int i=1;i<=n;++i)
for (rr int j=as[i];j;j=e[j].next)
if (col[i]^col[e[j].y]){
if (uk[col[i]][col[e[j].y]]) continue;
uk[col[i]][col[e[j].y]]=1;
E[++Et]=(node){col[e[j].y],hs[col[i]]},
hs[col[i]]=Et,++deg[col[e[j].y]];
}
for (rr int i=1;i<=cnt;++i)
if (!deg[i]){
rr bool f=1; ++ans;
if (siz[i]>1) continue;
for (rr int j=hs[i];j;j=E[j].next)
if (deg[E[j].y]==1){
f=0;
break;
}
if (f) flag=1;
}
return !printf("%lf",(n-ans+flag)*1.0/n);
}
#Tarjan#洛谷 4819 [中山市选]杀人游戏的更多相关文章
- 洛谷 P4819 [中山市选]杀人游戏(tarjan缩点)
P4819 [中山市选]杀人游戏 思路分析 题意最开始理解错了(我太菜了) 把题意简化一下,就是找到可以确定杀手身份的最小的危险查看数 (就是不知道该村名的身份,查看他的身份具有危险的查看数量),用 ...
- 洛谷 P4819 [中山市选]杀人游戏
洛谷 题目就是让我们在DAG中找到一些点,覆盖所有点. 因为是DAG,可以想到tarjan缩一下点.假设我们需要找x个点,那么答案就是(n-x)/n. 我们怎么选点呢? 敏锐的我们很快就能想到,直接选 ...
- [洛谷P4819][中山市选]杀人游戏
题目大意:有一张$n$个点$m$条边的有向图,有一个关键点,如果你访问一个点,你会知道它连出的边中有没有关键点,以及若有的话是哪个.问最优策略下不访问关键点而知道关键点的概率 题解:发现若一个点不是关 ...
- 【BZOJ2438】[中山市选]杀人游戏 Tarjan+概率
[中山市选]杀人游戏 Tarjan+概率 题目描述 一位冷血的杀手潜入\(Na\)-\(wiat\),并假装成平民.警察希望能在\(N\)个人里面,查出谁是杀手.警察能够对每一个人进行查证,假如查 ...
- Tarjan缩点【p4819】[中山市选]杀人游戏
Description 一位冷血的杀手潜入Na-wiat,并假装成平民.警察希望能在\(N\)个人里面,查出谁是杀手.警察能够对每一个人进行查证,假如查证的对象是平民,他会告诉警察,他认识的人,谁是杀 ...
- [中山市选]杀人游戏 (Tarjan缩点)
题目链接 Solution 可以考虑到如果知道环内一点的身份,如果凶手在其中就查出来了,同时不会有危险. 那么对警察造成威胁的就是那些身份不明且不能从其他点转移过来的点. 那么大部答案就是缩完点之后入 ...
- P4819 [中山市选]杀人游戏
题目描述 一位冷血的杀手潜入Na-wiat,并假装成平民.警察希望能在NN个人里面,查出谁是杀手.警察能够对每一个人进行查证,假如查证的对象是平民,他会告诉警察,他认识的人,谁是杀手,谁是平民.假如查 ...
- BZOJ2440/洛谷P4318 [中山市选2011]完全平方数 莫比乌斯函数
题意:找到第k个无平方因子数. 解法:这道题非常巧妙的运用了莫比乌斯函数的性质! 解法参考https://www.cnblogs.com/enzymii/p/8421314.html这位大佬的.这里我 ...
- 洛谷 P2059 [JLOI2013]卡牌游戏(概率dp)
题面 洛谷 题解 \(f[i][j]\)表示有i个人参与游戏,从庄家(即1)数j个人获胜的概率是多少 \(f[1][1] = 1\) 这样就可以不用讨论淘汰了哪些人和顺序 枚举选庄家选那张牌, 枚举下 ...
- 洛谷 大牛分站 P1000 超级玛丽游戏
题目背景 本题是洛谷的试机题目,可以帮助了解洛谷的使用. 建议完成本题目后继续尝试P1001.P1008. 题目描述 超级玛丽是一个非常经典的游戏.请你用字符画的形式输出超级玛丽中的一个场景. *** ...
随机推荐
- MYSQL查询数据表中某个字段包含某个数值
当某个字段中字符串是"1,2,3,4,5,6"或者"123456"查询数据表中某个字段是否包含某个值1:模糊查询 使用like select * ...
- djang中orm使用iterator()
当查询结果有很多对象时,QuerySet的缓存行为会导致使用大量内存.如果你需要对查询结果进行好几次循环,这种缓存是有意义的,但是对于 queryset 只循环一次的情况,缓存就没什么意义了.在这种情 ...
- vi或vim中底行模式的查找并替换
# 格式 s/要查找的内容/替换为的内容/修饰符 # 说明 要查找的内容:可使用基本正则表达式模式 替换为的内容:不能使用模式,但可以使用\1,\2...等后向引用符号,还可以使用"& ...
- 亲测可行,Android Studio 查看源码出现 Source for ‘Android API xxx Platform’ not found 的解决方法
亲测可行,Android Studio 查看源码出现 Source for 'Android API xxx Platform' not found 的解决方法 如标题中的问题,产生的原因就是 SDK ...
- MBD工具链的云部署
MBD工具链的云部署 "云技术永远不会用于汽车开发".说到云部署在汽车行业的应用,业界曾经认为云技术并不适合用在汽车行业的产品开发.知识产权保护.数据的安全.流程不够透明.迁移成本 ...
- JAVA对象生命周期(三)-对象的销毁
目录 从引用说起 指针直接引用 句柄引用 优缺点 如何判断对象死亡 引用计数法 可达性分析法 垃圾收集算法 标记-清除算法 复制算法 复制算法--优化 有关年轻代的JVM参数 标记-整理算法 分代收集 ...
- Hugging Face 表情包来啦!
小编有一个朋友,微信聊基本不回复文字,内容和情绪都化身成表情包直接回复,并且一气呵成.自带上下文衔接.你身边有这样的朋友吗? 作为梦想成为第一家以表情符号上市的公司,以及在社交平台发文 emoji 不 ...
- 使用 Docker 部署 GLPI 资产管理系统
1)GLPI 介绍 GLPI 简介 参考: https://github.com/glpi-project/glpi 官方文档:https://glpi-project.org/documentati ...
- TLS原理与实践(二)
主页 个人微信公众号:密码应用技术实战 个人博客园首页:https://www.cnblogs.com/informatics/ 引言 在上一篇博客中,我们通过<一文读懂TLS1.2协议](ht ...
- Sagas论文原文读后总结
一.引子 分布式事务组件seata最近社区很活跃,刚好公司有对接seata的计划.刚好借此机会,彻底了解下seata的价值.其中有一个比较特殊的模式叫SAGA模式,听起来就很懵逼,按照官网的介绍起源于 ...