题解:

tarjan+概率

首先tarjan缩点

然后计算一个x,计算方法:

1.每当有一个强连通分量i的入度为0,那么x++

2.如果有一个强连通分量i,它的入度为0,且它连的每一条边只有他连,那么x-1

答案就是(n-x)/n

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+,M=3e5+;
int dfn[N],num[N],low[N],x,y,an[N],cnt,fi[N];
int zz[M],ne[M],f[M],k,size[N],n,m,r[N],a[N],t,l;
int jb(int x,int y)
{
zz[++k]=y;
f[k]=x;
ne[k]=fi[x];
fi[x]=k;
}
int dfs(int u)
{
dfn[u]=low[u]=++l;
a[++t]=u;
for(int i=fi[u];i;i=ne[i])
if(!dfn[zz[i]])
{
dfs(zz[i]);
low[u]=min(low[u],low[zz[i]]);
}
else if(!an[zz[i]])low[u]=min(low[u],dfn[zz[i]]);
if(low[u]==dfn[u])
{
num[++cnt]=u;
while(t)
{
an[a[t]]=cnt;
size[cnt]++;
if(a[t--]==u) break;
}
}
}
int pd(int x)
{
int u=num[x];
for(int i=fi[u];i;i=ne[i])
if(r[an[zz[i]]]==)return ;
return ;
}
int main()
{
scanf("%d%d",&n,&m);
while (m--)
{
scanf("%d%d",&x,&y);
jb(x,y);
}
for(int i=;i<=n;i++)
if(!dfn[i]) dfs(i);
for(int i=;i<=k;i++)
if(an[f[i]]!=an[zz[i]]) r[an[zz[i]]]++;
int ans=;
for(int i=;i<=cnt;i++)
if(!r[i]) ans++;
for(int i=;i<=cnt;i++)
if(size[i]==&&!r[i]&&pd(i))
{
ans--;
break;
}
printf("%.6lf",(double)(n-ans)/n);
return ;
}

bzoj2438的更多相关文章

  1. 【bzoj2438】 中山市选2011—杀人游戏

    http://www.lydsy.com/JudgeOnline/problem.php?id=2438 (题目链接) 题意 n个点的有向图,其中有一个是杀手,每个人成为杀手的概率相同.警察询问一个人 ...

  2. bzoj2438 杀人游戏 Tarjan强联通

    [bzoj2438][中山市选2011]杀人游戏 Description 一位冷血的杀手潜入 Na-wiat,并假装成平民.警察希望能在 N 个人里面,查出谁是杀手.警察能够对每一个人进行查证,假如查 ...

  3. LG4819/BZOJ2438 「中山市选2011」杀人游戏 Tarjan缩点+概率

    问题描述 LG4819 BZOJ2438 题解 发现如果有一些人之间认识关系形成环,只需要问一个人就能把控整个环. \(\mathrm{Tarjan}\)缩点. 缩点之后所有入度为\(0\)的点,必须 ...

  4. bzoj2438[中山市选2011]杀人游戏

    Description 一位冷血的杀手潜入 Na-wiat,并假装成平民.警察希望能在 N 个人里面, 查出谁是杀手. 警察能够对每一个人进行查证,假如查证的对象是平民,他会告诉警察,他 认识的人, ...

  5. [BZOJ2438]杀人游戏(缩点+特判)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2438 分析:如果出现了环,那么只要询问环上的一个人,那么环上其他的人的信息也就知道了, ...

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

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

  7. 【BZOJ2438】 [中山市选2011]杀人游戏 tarjan强连通分量+缩点

    Description 一位冷血的杀手潜入 Na-wiat,并假装成平民.警察希望能在 N 个人里面,查出谁是杀手. 警察能够对每一个人进行查证,假如查证的对象是平民,他会告诉警察,他认识的人, 谁是 ...

  8. 【强连通分量+概率】Bzoj2438 杀人游戏

    Description 一位冷血的杀手潜入 Na-wiat,并假装成平民.警察希望能在 N 个人里面,查出谁是杀手. 警察能够对每一个人进行查证,假如查证的对象是平民,他会告诉警察,他认识的人, 谁是 ...

  9. BZOJ2438:[中山市选2011]杀人游戏(强连通分量)

    Description 一位冷血的杀手潜入 Na-wiat,并假装成平民.警察希望能在 N 个人里面,查出谁是杀手.警察能够对每一个人 进行查证,假如查证的对象是平民,他会告诉警察,他认识的人, 谁是 ...

随机推荐

  1. POJ3241 Object Clustering(最小生成树)题解

    题意:求最小生成树第K大的边权值 思路: 如果暴力加边再用Kruskal,边太多会超时.这里用一个算法来减少有效边的加入. 边权值为点间曼哈顿距离,那么每个点的有效加边选择应该是和他最近的4个象限方向 ...

  2. 源码编译安装keepalived

    首先到官网下载需要的包:http://www.keepalived.org/download.html [root@localhost local]# .tar.gz [root@localhost ...

  3. java中年月日的加减法,年月的加减法使用

    本文为博主原创,未经允许不得转载: java计算两个年月日之间相差的天数: public static int daysBetween(String smdate,String bdate) thro ...

  4. 又见链表 --- 另一种Creat方式与反转

    链表 作为一种数据结构,链表以其方便的增删查改功能,实现了无数经典有用的程序. 在之前的帖子里,我构建链表的方式是建立一个不储存数据的head节点,然后通过一边输入数据一边建立结点的方式构建整个链表. ...

  5. 使用u盘重装双系统中的乌班图

    之前的乌班图被我玩坏了,故而想重装一个.由于之前的双系统是同学帮我装的,我便到网上找各种资料,鼓弄了一天,终于完事了.把过程记录一下. window10 64bit ubuntu 14.04 desk ...

  6. Gym - 100345H Settling the Universe Up(bitset)

    https://vjudge.net/problem/Gym-100345H 题意: 给出一个图,求图中u能到达v的对数,并且u<v.并且会有更新和查询操作. 思路: bitset直接暴力,对于 ...

  7. C++ 在容器A中查找最后出现的容器B中的元素,并返回iterator(find_end)

    #include <iostream> // cout #include <algorithm> // find_end #include <vector> // ...

  8. shell 截取字符串

    vvar='{"floor":2,"hotelid":"3433bbb"}' #vvar='{"hotelid":&qu ...

  9. java中的值传递和引用传递用法详解

    值传递:方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参 数的值. 引用传递:也称为传地址.方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对 ...

  10. YOLO V1论文理解

    摘要 作者提出了一种新的物体检测方法YOLO.YOLO之前的物体检测方法主要是通过region proposal产生大量的可能包含待检测物体的 potential bounding box,再用分类器 ...