P8881 懂事时理解原神
简要题意
\(T\) 组数据,每组数据给出一个 \(n\) 个顶点,\(m\) 条边的无向无权图。求出使用下面的伪代码求 \(1\) 为源点的单源最短路答案正确的概率。保留 \(3\) 位小数。
int dis[N],vis[N];// dis 是答案数组
void dfs(int u){
vis[u]=1;
vector<int> vct;
for(int i=1;i<=n;i++){
if(!vis[i] && 存在边(u,i)){
vct.push_back(i);
}
}
random_shuffle(vct.begin(),vct.end());
for(int i:vct){
dis[v]=dis[u]+1;
dfs(i);
}
}
void solve(){
for(int i=1;i<=n;i++){
vis[i]=0;
dis[i]=-1;
}
dis[1]=0;
dfs(1);
}
对于 \(100\%\) 的数据,\(1\le n,m\le 50000,1\le T\le 10\),保证所输入的图无重边、自环。
思路
可以看出,这个最短路非常像求树的深度。树有一个重要的性质就是不存在环。如果有环一定错了。
为什么?因为如果存在一个环,像这样:

模拟一遍:
- \(\operatorname{dis}_1=0\)
- \(\operatorname{dis}_4=1\)
- 如果先遍历 \(2\),那么 \(\operatorname{dis}_2=2\),否则 \(\operatorname{dis}_3=2\)。
- 如果上一步先遍历 \(2\),那么 \(\operatorname{dis}_3=3\),否则 \(\operatorname{dis}_2=3\)。
正确的 \(\operatorname{dis}_2=2,\operatorname{dis}_3=2\),而该算法都算错了。
读者可以再枚举几个,可以发现,环上节点会算错。这时候,如果环上再接出去一个节点,那么它依然会算错。
于是得出结论:如果存在从 \(1\) 出发的环。那么答案是 \(0.000\),否则答案是 \(1.000\)。
并查集解决。时间复杂度 \(O(T(m+n)\log n)\)。
代码
#include <bits/stdc++.h>
using namespace std;
const int N = 50005;
int fa[N],t,n,m;
bool tag[N];
int find(int x){
if(fa[x]==x)return x;
else return fa[x]=find(fa[x]);
}
inline void merge(int u,int v){
if(find(u)==find(v)){
tag[find(v)]=1;
return;
}
fa[find(u)]=find(v);
}
signed main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>t;
while(t--){
cin>>n>>m;
for(int i=1;i<=n;i++) fa[i]=i;
for(int i=1;i<=n;i++) tag[i]=0;
for(int i=1,u,v;i<=m;i++){
cin>>u>>v;
merge(u,v);
}
bool flag=1;
for(int i=1;i<=n;i++){
if(find(1)==find(i)&&tag[i]){
cout<<"0.000\n";
flag=0;
break;
}
}
if(flag) cout<<"1.000\n";
}
return 0;
}
P8881 懂事时理解原神的更多相关文章
- 利用Github Action和.Net 5 自动执行米游社原神每日签到福利
GenshinDailyHelper 原神的签到福利是需要单独下载APP进行才可以领取,并且每天需要打卡,虽然奖励并不是很可观,但有一些摩拉,食材和可观的经验书累计起来还是挺有吸引力的.可能本身不怎么 ...
- 利用.NET 5和Github Action 自动执行米游社原神每日签到福利
背景 众所周知,原神的签到福利是需要下载app才可以领取的.但像我这种一般不怎么刷论坛的人,每天点开app签到很麻烦. 很多大佬利用Github的Action自动执行的模式,实现了很多好东西.加上.n ...
- NSSCTF-原来你也玩原神
是一个杂项的题目,看到题目名字的时候,以为是和之前遇到的一个杂项题里面的原神的编码有关,然后发现不是的,给的是一个压缩包文件,使用winhex打开,并没有看到压缩包的文件头也没有看到,使用一般常用的b ...
- 【Unity原神AR开发实战 2022】下载原神模型,PMX转FBX,导入到Unity,AR设置,测试应用程序,生成应用程序
文章目录 一.前言 二.模型下载 1.官网下载 2.模之屋官方下载 3.第三方链接 三.pmx转fbx 1.Blender插件CATS的下载与安装 2.pmx模型的导入 四.Unity开发部分 1.V ...
- windows优化原神
原神3.0新地图很卡顿? 锐距显卡带不动? 看一下我的配置 英特尔i5-1135G7 内存16GB可以拓展32GB 固态512GB 原神优化前帧率50左右 优化后59-60最差55 展示图原神设置图 ...
- Python之美[从菜鸟到高手]--深刻理解原类(metaclass)
本来想自己写这篇文章的,可当我读了这篇文章http://blog.jobbole.com/21351/,我打消了这个念头,因为肯定写的没有人家的好,说的通俗易懂,面面俱到.就厚着面皮修改下格式,测试下 ...
- 自定制页面跳转时携带原搜索参数的URL
介绍 django自带反向解析生成URL的功能,目的是避免硬编码,较少代码维护的代价. 前端页面使用模板语法,如:{% url "rbac: request menu_list" ...
- [OC笔记]@property之个人理解,大神轻拍
/** * 一个简单的对象 * * @author suzhen * */ public class SimpleObjcet { /** * 声明一个age字段 */ private Object ...
- React实现顶部固定滑动式导航栏(导航条下拉一定像素时显示原导航栏样式)
摘要 基于react的框架开发一个顶部固定滑动式的酷炫导航栏,当导航栏置顶时,导航栏沉浸在背景图片里:当鼠标滑动滚轮时,导航栏固定滑动并展示下拉样式. JS部分 相关技术栈:react.antd.re ...
- VC程序只运行一个实例,并在打开多个时激活原窗口
(一)单文档应用程序 1.在应用程序类C~~App::InitInstance()函数中判断是否已有一个应用程序实例正在运行 BOOL C~~App::InitInstance() { . ...
随机推荐
- 安装与配置FTP服务器
概: 文件传输协议 (File Transfer Protocol,FTP),用于在网络上进行文件传输的协议.如果用户需要将文件从本机发送到另一台计算机,可以使用FTP上传操作:反之,用户可以使用 ...
- 10.-ORM-基础字段及选项
一.ORM-基础字段及选项 任何关于表结构的修改,务必在对应模型类上修改 例如 给 books_book表添加一个info字段 varchar(100) 1.在模型中添加对应的类属性 2.执行数据库迁 ...
- Spring中过滤器(Filter)和拦截器(Interceptor)的区别和联系
在我们日常的开发中,我们经常会用到Filter和Interceptor.有时同一个功能.Filter可以做,Interceptor也可以做.有时就需要考虑使用哪一个比较好.这篇文章主要介绍一下,二者的 ...
- element-ui v-table 复选框默认选中
<el-table ref="refTable" :data="list" v-loading="listLoading" eleme ...
- Codeforces Round #826 (Div. 3) A-E
比赛链接 A 题解 知识点:模拟. 时间复杂度 \(O(n)\) 空间复杂度 \(O(n)\) 代码 #include <bits/stdc++.h> #define ll long lo ...
- 物理服务器做系统盘centos
linux系统跟windows系统都是操作系统的一种,安装的方法也较多,一样可以通过制作u盘启动盘给linux系统安装.那么具体是如何安装linux?下面就给大家演示下u盘启动盘安装linux系统教程 ...
- Mysql之PXC高可用
PXC高可用 1.环境准备 pxc1: centos7 10.0.0.7 pxc2: centos7 10.0.0.17 pxc3: centos7 10.0.0.27 pxc4: centos7 1 ...
- Xpath 高级用法
xpath 高级用法 1. 匹配当前节点下的所有: .// . 表示当前 // 表示当前标签下的所有标签 注: 要配合使用 2. 匹配某标签的属性值: /@属性名称 这里以input里的value值为 ...
- Redis可视化管理工具-RedisDesktopManager
Windows客户端,访问Redis数据库并执行一些基本操作. 链接:https://pan.baidu.com/s/1OuGqIfbpGwglC-642rECbQ 提取码:m6uo
- tomcat报Address localhost:1099 is already in use
idea运行tomcat报Address localhost:1099 is already in use 解决方案: 电脑桌面->ctrl+shift+esc 打开任务管理器,选择详细信息,找 ...