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() { . ...
随机推荐
- C++ 函数重载解析策略
参考<C++ Primer Plus>(第6版)中文版,Stephen Prata 著,张海龙 袁国忠译,人民邮电出版社.C++ 使用重载解析策略来决定为函数调用使用哪一个函数定义.重载解 ...
- 插入排序算法(Java代码实现)
其它经典排序算法:https://blog.csdn.net/weixin_43304253/article/details/121209905 插入排序算法: 思路:将数据分为已经排序好的数据和未排 ...
- Oracle中查询表结构的六种方法
首发微信公众号:SQL数据库运维 原文链接:https://mp.weixin.qq.com/s?__biz=MzI1NTQyNzg3MQ==&mid=2247485212&idx=1 ...
- 如何在.NET程序崩溃时自动创建Dump?
今天在浏览张队转载文章的留言时,遇到一个读者问了这样的问题,如下图所示: 首先能明确的一点是"程序崩溃退出了是不能用常规的方式dump的",因为整个进程树都已经退出.现场已经无法使 ...
- 重新整理 .net core 实践篇 ———— linux上排查问题实用工具 [外篇]
前言 介绍下面几个工具: Lldb createdump dotnet-dump dotnet-gcdump dotnet-symbol Procdump 该文的前置篇为: https://www.c ...
- 前端常见loading动画
loading动画是前端页面加载时必不可少的元素,好看合适的加载动画会极大的提升用户体验与系统的交互效果.下面为大家提供几种简单的加载动画效果,如果帮助到你了请点赞评论. 1.无限循环的圆圈 < ...
- python(27)反射机制
1. 什么是反射? 它的核心本质其实就是基于字符串的事件驱动,通过字符串的形式去操作对象的属性或者方法 2. 反射的优点 一个概念被提出来,就是要明白它的优点有哪些,这样我们才能知道为什么要使用反射. ...
- JMeter自定义HTTP组件
JMeter是一个优秀的开源项目,我们可以在jmeter的官网了解到如何使用和如何二次开发:https://jmeter.apache.org/ 因工作需要,最近做了一个JMeter自定义的http组 ...
- WPF之XAML
XAML是WPF技术中专门用于设计UI的语言.优点在于: (1)XAML可以设计出专业的UI和动画--好用. (2)简单易懂,易学. (3)设计师可以直接参与软件设计,随时沟通,无须二次转化--高效. ...
- C#使用GDI+同时绘制图像和ROI在picturebox上
Bitmap bmp; /// <summary> /// 绘制图像 /// </summary> /// <param name="g">Gr ...