[中山市选]杀人游戏 (Tarjan缩点)

题目链接

Solution

可以考虑到如果知道环内一点的身份,如果凶手在其中就查出来了,同时不会有危险.
那么对警察造成威胁的就是那些身份不明且不能从其他点转移过来的点.
那么大部答案就是缩完点之后入度为 \(0\) 的联通块数量.
但是,会有特殊情况:
1277344-20180907171807276-1626038471.png

如图,我们就只要查 \(2\) 或者 \(1\) 其中的一点即可.
也就是说如果一个联通块仅包含一个点,且其出边所到的点都能由其他点推导出来.
那么我们可以通过调整对于入度为 \(0\) 的点的访问顺序以忽略这个点.
同时这样的点只能有一个(可以很简单举出反例).

Code

#include<bits/stdc++.h>
using namespace std;
const int maxn=1000008;
struct sj{int to,next;}a[maxn];
int head[maxn],size,flagg;
int dfn[maxn],low[maxn];
int sta[maxn],top,belong[maxn];
int cnt,tot,v[maxn],n;
int du[maxn],ans,num,m;
int fr[maxn],to[maxn],siz[maxn];
void add(int x,int y)
{a[++size].to=y;a[size].next=head[x];head[x]=size;
}void tarjan(int x)
{dfn[x]=low[x]=++tot;sta[++top]=x;v[x]=1;for(int i=head[x];i;i=a[i].next){int tt=a[i].to;if(!dfn[tt]){tarjan(tt);low[x]=min(low[x],low[tt]);}else if(v[tt]) low[x]=min(low[x],dfn[tt]);}if(dfn[x]==low[x]){belong[x]=++cnt;v[x]=0;do{siz[cnt]++;belong[sta[top]]=cnt;v[sta[top]]=0;}while(sta[top--]!=x);}
}int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){int x,y; scanf("%d%d",&x,&y);add(x,y);}for(int i=1;i<=n;i++)if(!dfn[i])tarjan(i);for(int x=1;x<=n;x++)for(int i=head[x];i;i=a[i].next){int tt=a[i].to;if(belong[tt]!=belong[x])du[belong[tt]]++,fr[++num]=belong[x],to[num]=belong[tt];}memset(a,0,sizeof(a));memset(head,0,sizeof(head));size=0;for(int i=1;i<=num;i++)add(fr[i],to[i]);for(int x=1;x<=cnt;x++)if(du[x]==0){ans++;if(siz[x]==1){int flag=1;for(int i=head[x];i;i=a[i].next){int tt=a[i].to;if(du[tt]==1){flag=0;break;}}if(!flagg)flagg=flag;if(!head[x])flagg=1;}}ans-=flagg;if(n==1)ans=0;if(m==0)ans=n-1;printf("%.6lf\n",(n*1.0-ans*1.0)/(n*1.0));
}

转载于:https://www.cnblogs.com/Kv-Stalin/p/9605664.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570457.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库为date型,而前端要显示String型,问题解决

关于数据库字段类型与前端显示类型不符问题解决&#xff1a;最近遇到这样的一个问题&#xff0c;有一个字段在数据库是date型的&#xff0c;但是产品需求我们在前端这样显示&#xff0c;如下图&#xff1b; 先把时间显示出来&#xff0c;最后一行显示上面所有记录的汇总。 而这…

codeforces 1039B Subway Pursuit【二分+随机】

题目&#xff1a;戳这里 题意&#xff1a;一个点在[1,n]以内&#xff0c;我们可以进行4500次查询&#xff0c;每次查询之后&#xff0c;该点会向左或向右移动0~k步&#xff0c;请在4500次查询以内找到该点。 解题思路&#xff1a;一边二分&#xff0c;一边随机。 交互题似乎有好…

sql截取指定长度

select *,SUBSTRING(sum_day,1,4) as sum_day from report_waste_sum_years SUBSTRING 用法SUBSTRING&#xff08;这个为想截取的字段&#xff0c;这个是从哪个开始&#xff0c;从哪个停止&#xff09; 从1开始&#xff0c;如我这1,4&#xff0c;最后截取的是这个字段的前4&…

kbmmw中向服务器端传递对象的一种简单方式

运行环境&#xff1a;delphi 10.2kbmmw 5.6.20 在kbmmw 的老版本中&#xff0c;要向服务器传送一个本地的对象&#xff0c;一般都需要进行一些转换&#xff0c;例如通过序列化的方式。 在新版的kbmmw中这一切都变的很简单&#xff0c;使用use... 方法就可以了&#xff0c;非常的…

给自己的网址加上https,添加ssl证书(springboot项目)

给自己的网址加上https,添加ssl证书1.先去阿里云官网首页&#xff0c;登录&#xff0c;找到 *SSL证书*2.点击 *立即购买*3.选择好点击确定就可以4.输入自己的域名和手机号&#xff0c;等待即可&#xff0c;成功他就叫给你发邮件5.通知你通过以后就进入SSL控制台&#xff0c;点击…

转载几个和职业建议相关的文章

不要自称为程序员http://www.ruanyifeng.com/blog/2011/10/dont_call_yourself_a_programmer.html 面试时&#xff0c;如何向公司提问&#xff1f;http://www.ruanyifeng.com/blog/2012/08/questions_you_need_to_ask_in_an_interview.html 七个对我最好的职业建议&#xff08;…

将多选框中的值,用String接收,并用‘,’隔开,到后台去循环这个数据

//首先通过CheckBox的名字去找到所有的CheckBox&#xff0c; var obj document.getElementsByName("checkbox1"); var check_val ""; //再来循环obj&#xff0c;把obj中的值全部放进check_val中&#xff0c;并用,隔开 for (var i 0; i < obj.length;…

Manacher【p1210】回文检测

题目描述--->P1210 回文检测 分析: 看到回文显然想到了manacher算法(线性求解回文串问题 如果不了解还是去敲一下板子,学习一下比较好.-->manacher 题目要求我们求出只包含字母的回文串的长度. 如果你会manacher,这很简单. 只需要在输入之后处理一下我们得到的串即可. 这…

怎么通过路径藏值,然后通过js,jq获取页面路径带过来的值

我们在转跳页面的时候经常会通过页面路径藏一下我们需要的值 url: ../ms/startCheck.html?projectIdprojectId&institutionsIdinstitutionsId, //这个是我转跳的路径&#xff0c;上面的projectId和institutionsId都是已经赋值了的//比如这个是我们的页面路径 http://127.…

SimpleDateFormat的一些简单用法:时间类型转字符串,字符串转时间

我们在编程过程中经常会用到SimpleDateFormat这个类&#xff0c;这里记录一下这个SimpleDateFormat的简单用法。 //这个是我们常见的&#xff0c;这个转格式主要是看后面括号里写的是什么样的格式 SimpleDateFormat formater new SimpleDateFormat("yyyy-MM-dd HH:mm:ss…

c++命名空间---namespace

C 命名空间 C 应用程序中。例如&#xff0c;您可能会写一个名为 func() 的函数&#xff0c;在另一个可用的库中也存在一个相同的函数 func()。这样&#xff0c;编译器就无法判断您所使用的是哪一个 func() 函数。 因此&#xff0c;引入了命名空间这个概念&#xff0c;专门用于解…

基于深度学习的中文语音识别系统框架(pluse)

目录 声学模型GRU-CTCDFCNNDFSMN语言模型n-gramCBHG数据集本文搭建一个完整的中文语音识别系统&#xff0c;包括声学模型和语言模型&#xff0c;能够将输入的音频信号识别为汉字。 声学模型使用了应用较为广泛的递归循环网络中的GRU-CTC的组合&#xff0c;除此之外还引入了科大…

jSignature签名的用法,一文教会你(一)前端代码

jSignature签名的用法1、先看看效果以后最后它是什么格式的2、先去下载该js3、下载以后就把它引入我们的HTML中4、看一下我的例子吧&#xff01;下期我们在讲&#xff0c;怎么把base64在后台处理&#xff0c;然后在存进我们指定的位置&#xff0c;以及怎么存数据库&#xff1b;…

jSignature签名的用法,一文教会你(二)后台代码

1、先在我们的项目里加几个工具类&#xff0c;代码如下 AbstractUploadAction &#xff08;名字可以自取&#xff0c;这个不影响&#xff09; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.OutputStream;import javax.s…

mac系统,鼠标移动太慢

to check your speed:defaults read -g com.apple.mouse.scalingto set your speeddefaults write -g com.apple.mouse.scaling 7reboot your mac转载于:https://www.cnblogs.com/IWings/p/9614793.html

关于js的一些常用小知识点(持续更新)

关于js的一些常用小知识点1、获取页面中所有选中的CheckBox复选框的值2、js获取网页URL中所带的参数3、js模拟点击button4、前端传入后台list&#xff0c;后台是不能接收List的&#xff0c;就需要传的时候转化一下&#xff0c;把list转成String&#xff0c;后台用一个String型接…

esp32-智能语音-录音(保存于SD卡)

1 //初始化ES8388&#xff0c;更改为双麦 2 ESP_LOGI(TAG, "[ 2 ] Start codec chip"); 3 audio_hal_codec_config_t audio_hal_codec_cfg AUDIO_HAL_ES8388_DEFAULT(); 4 audio_hal_handle_t hal audio_hal_init(&audio_hal_codec_cfg, 0); 5 …

HTML5 多图片上传(前端+后台详解)

HTML5 多图片上传&#xff08;前端后台详解&#xff09;1、参考jquery插件库2、修改代码3、添加的后台代码4、删除的后台代码1、参考jquery插件库 手机端实现多图片上传 2、修改代码 我发现他这里的代码仅仅只是显示出来了&#xff0c;对后台一点作用都没有&#xff0c;于是…

vue2.0移动端自定义性别选择提示框

这篇文章主要是简单的实现了vue2.0移动端自定义性别选择的功能&#xff0c;很简单但是经常用到&#xff0c;于是写了一个小小的demo&#xff0c;记录下来。 效果图&#xff1a; 图片.png实现代码&#xff1a; <template><div class"app"><div class&q…

Linux的一些简单的常用命令

基本操作 基本操作 1>.ls &#xff08;横向查看目录&#xff09; ll&#xff08;竖排查看目录&#xff09; 2>.mkdir &#xff08;创建文件夹&#xff09; 3>.cd 文件夹名 &#xff08;进入该文件夹&#xff09; cd ..&#xff08;返回上一级目录&#xff09; 4>.…