P2444 [POI2000] 病毒

[P2444 POI2000] 病毒 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

问题等价于在字典图中找一个环,这个环要满足环上节点不是所有所给字符串最后一个字符结尾的点。

找环算法:

void dfs(int u) {in[u] = 1; // u在当前dfs路径中for(auto y: g[u]) {if(in[y]) {// 与dfs路径中点重合,成环fg = 1;}// 如果之前已经访问过y点,表示经过y点不会有环if(vis[y]) continue; vis[y] = 1;dfs(y);}in[u] = 0;
}

本题找环,还需要保证,y点不是所给字符串中最后一个字符结尾的点。

代码:

#include <iostream>
#include <vector>
#include <string>
#include <cstring>
#include <set>
#include <map>
#include <queue>
#include <ctime>
#include <random>
#include <sstream>
#include <numeric>
#include <stdio.h>
#include <functional>
#include <bitset>
#include <algorithm>
using namespace std;// #define Multiple_groups_of_examples
// #define int_to_long_long
#define IOS std::cout.tie(0);std::cin.tie(0)->sync_with_stdio(false); // 开IOS,需要保证只使用Cpp io流 *
#define dbgnb(a) std::cout << #a << " = " << a << '\n';
#define dbgtt cout<<" !!!test!!! "<<'\n';
#define rep(i,x,n) for(int i = x; i <= n; i++)#define all(x) (x).begin(),(x).end()
#define pb push_back
#define vf first
#define vs secondtypedef long long LL;
#ifdef int_to_long_long
#define int long long
#endif
typedef pair<int,int> PII;const int INF = 0x3f3f3f3f;
const int N = 2e5 + 21;namespace golitter {
namespace ACAM {
// https://www.luogu.com.cn/problem/P5357
// https://zhuanlan.zhihu.com/p/546999184
struct acam {static const int M = 300005;struct node {int fail;int ch[28] = {0};}tr[M];int cnt = 0;map<int,int> ref;vector<int> g[M];int ans[M];bitset<M> in, vis, isend;void insert(string &s, int id) {int u = 0;for(auto c: s) {int last = c == '_' ? 26 : c - 'a';if(!tr[u].ch[last]) {tr[u].ch[last] = ++cnt;}u = tr[u].ch[last];}isend[u] = 1;ref[id] = u;}void build() {queue<int> que;for(int i = 0; i < 27; ++i) {if(tr[0].ch[i]) que.push(tr[0].ch[i]);}while(que.size()) {int u = que.front(); que.pop();for(int i = 0; i < 27; ++i) {if(tr[u].ch[i]) {tr[tr[u].ch[i]].fail = tr[tr[u].fail].ch[i];que.push(tr[u].ch[i]);if(isend[tr[tr[u].ch[i]].fail]) isend[tr[u].ch[i]] = 1;} else tr[u].ch[i] = tr[tr[u].fail].ch[i];}}for(int i = 1; i <= cnt; ++i) g[tr[i].fail].push_back(i);}void query(string &S) {int u = 0;for(auto c: S) {int last = c == '_' ? 26 : c - 'a';u = tr[u].ch[last];ans[u]++;}}bool fg = 0;bool check() {dfs(0);return fg;}void dfs(int u) {in[u] = 1;for(int i = 0; i <= 1; ++i) {if(in[tr[u].ch[i]]) {fg = 1;return ;}if(vis[tr[u].ch[i]] || isend[tr[u].ch[i]]) continue;vis[tr[u].ch[i]] = 1;dfs(tr[u].ch[i]);}in[u] = 0;}void clear() {for(int i = 0; i < M; ++i) {tr[i] = {};g[i].clear();ans[i] = 0;}ref.clear();cnt = 0;}
}trie;}}
using golitter::ACAM::trie;
void inpfile();
void solve() {int n; cin>>n;for(int i = 0; i< n; ++i) {string s; cin>>s;for(auto&t: s) {if(t == '1') t = 'b';else t = 'a';}trie.insert(s, i);}trie.build();puts(trie.check() ? "TAK" : "NIE");
}
#ifdef int_to_long_long
signed main()
#else
int main()
#endif{#ifdef Multiple_groups_of_examplesint T; cin>>T;while(T--)#endifsolve();return 0;
}
void inpfile() {#define mytest#ifdef mytestfreopen("ANSWER.txt", "w",stdout);#endif
}

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

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

相关文章

机器学习笔记 - FlowNet:使用卷积网络学习光流

一、概述 卷积神经网络(CNN)对各种计算机视觉任务做出了巨大贡献。最近,CNN 已成功用于估计光流。与传统方法相比,这些方法在质量上取得了很大的提高。在此,我们将对以下论文进行简要回顾。 FlowNet1.0和FlowNet2.0都是端到端架构。FlowNet2.0是FlowNetCorr和FlowNetS的堆…

Linux常见命令手册

目录 文件命令 文件和目录命令 文件的权限命令 文件搜索命令 进程命令 查看进程命令 关闭进程命令 用户和群组命令 网络命令 firewall-cmd 网络应用命令 高级网络命令 网络测试命令 网络安全命令 网络配置命令 软件管理命令 系统信息命令 vi编辑器 关机命令…

【android】install android NDK

目录 1 下载NDK 2 解压 3 android-ndk的配置 1 下载NDK 下载网址&#xff1a;NDK 下载 | Android NDK | Android Developers 如果没有所需要的版本&#xff0c;则点击页面下面 不受支持的 NDK 下载需要的版本。 2 解压 将压缩文件&#xff08;例如 android-ndk-r25c-…

webpack 中,filename 和 chunkFilename 的区别

filename filename 是一个很常见的配置&#xff0c;就是对应于 entry 里面的输入文件&#xff0c;经过webpack打包后输出文件的文件名。比如说经过下面的配置&#xff0c;生成出来的文件名为 index.min.js。 chunkFilename chunkFilename 指未被列在 entry 中&#xff0c;却…

C语言求解猴子吃桃问题

这是一道经典的数学问题&#xff0c;可以使用递归或循环两种方法来解决。 递归方法&#xff1a; 假设第10天猴子有x个桃子吃&#xff0c;那么第9天猴子一定有(x 1) * 2个桃子&#xff0c;以此类推&#xff0c;可以得到第1天猴子要有多少个桃子才能保证最后剩下1个。 代码如…

使用 Splashtop 的开放 API 简化 IT 工作流程

我们的工作方式在不断变化&#xff0c;IT 技术人员必须迅速适应时代的变化。越来越多的公司正在转向混合和远程策略&#xff0c;这为那些在服务台或IT技术人员工作的人增加了额外的工作层。对于系统管理员来说&#xff0c;管理一切都可能变得更加复杂。 找到合适的软件来管理多…

Stable Diffusion - StableDiffusion WebUI 软件升级与扩展兼容

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/134463035 目前&#xff0c;StableDiffusion WebUI 的版本是 1.6.0&#xff0c;同步更新 controlnet、tagcomplete、roop、easy-prompt-selector等…

JDY蓝牙注意事项

波特率设置&#xff1a;9600&#xff0c;不接受115200&#xff0c;或者38400. 不同于WiFi测试&#xff0c;jdy蓝牙不接受AT"指令&#xff0c;可以使用“ATVERSION"指令测试 安信可公司的那个蓝牙指令在这里没有用&#xff0c;不知道是不是生产的公司不一样

9 Redis的发布和订阅

127.0.0.1:6379> publish topic1 jack (integer) 0 #表示此时没有被订阅&#xff0c;消息丢了发布订阅&#xff1a;发送即忘的原则&#xff0c;发了就不管了&#xff0c;没有人订阅&#xff0c;就丢了。 127.0.0.1:6379> subscribe topic1 Reading message ... #表示开…

产业区块链生态日:你的故事,我们在等待 | 征集帖

Hello&#xff0c;FISCO BCOS的朋友们&#xff0c;FISCO BCOS开源社区一年一度的盛会即将在12月份与大家见面啦&#xff01;今年的盛会将进一步升级&#xff0c;以产业区块链生态日的形式&#xff0c;与业界共同探索区块链产业的发展现状与未来。 在生态日上&#xff0c;社区意…

【LeetCode】每日一题 2023_11_20 最大子数组和(dp)

文章目录 刷题前唠嗑题目&#xff1a;最大子数组和题目描述代码与解题思路 刷题前唠嗑 LeetCode? 启动&#xff01;&#xff01;&#xff01; 今天是一道 LeetCode 的经典题目&#xff0c;如果是 LeetCode 老手&#xff0c;估计都刷过&#xff0c;话是这么说&#xff0c;但咱…

Python 自动化(十八)admin后台管理

admin后台管理 什么是admin后台管理 django提供了比较完善的后台数据库的接口&#xff0c;可供开发过程中调用和测试使用 django会搜集所有已注册的模型类&#xff0c;为这些模型类提供数据管理界面&#xff0c;供开发使用 admin配置步骤 创建后台管理账号 该账号为管理后…

简单回顾矩阵的相乘(点乘)230101

[[1 0 1][1 1 0]] [[3 0 0 3][2 2 1 3][1 3 1 1]] [[4. 3. 1. 4.][5. 2. 1. 6.]]乘以 c11 a11*b11 a12*b21 a13*b31 1*3 0*2 1*1 4 c12 a11*b12 a12*b22 a13*b32 1*0 0*2 1*3 3 c13a11*b13 a12*b23a13*b33 c14a11*b14 a12*b24a13*b34 c21a21*b11 a22*b21 a23*b…

《QT从基础到进阶·三十五》QT插件实现侧边工具栏tabBar

tabBar是用QT插件实现的一个dll&#xff0c;对于插件的使用可以参考文章&#xff1a; 《QT从基础到进阶三十三》QT插件开发QtPlugin 源码放在文章末尾 该功能类似侧边工具栏&#xff0c;可以在该标签栏上添加自己开发的界面&#xff0c;实现代码如下&#xff1a; 1、所有功能…

Tomcat无法映射到activiti-app导致activiti无法启动页面

原因之一&#xff1a;JDK版本与Tomcat版本不匹配&#xff0c;jdk8 yyds 我使用的是JDK11&#xff0c;Tomcat是9.0的&#xff0c;都是最新的&#xff0c;但还是不行&#xff0c;最后JDK改为8&#xff0c;tomcat的cmd后台没有报错&#xff0c;activiti-pp也可以正常访问了,很神奇…

Linux输入设备应用编程(键盘,按键,触摸屏,鼠标)

目录 一 输入设备编程介绍 1.1 什么是输入设备呢&#xff1f; 1.2 什么是输入设备的应用编程&#xff1f; 1.3 input子系统 1.4 数据读取流程 1.5 应用程序如何解析数据 1.5.1 按键类事件&#xff1a; 1.5.2 相对位移事件 1.5.3 绝对位移事件 二 读取 struct input_e…

ATFX汇市:欧元区10月CPI年率终值不变,EURUSD逼近1.1000心理关口

ATFX汇市&#xff1a;据欧盟统计局11月17日发布的数据&#xff0c;欧元区10月名义CPI年率终值2.9%&#xff0c;与10月末公布的初值持平。欧央行对通胀率的长期调控目标为2%左右&#xff0c;10月份名义CPI年率已经非常接近目标范围&#xff0c;欧央行继续加息的紧迫性降低。10月…

【AI视野·今日Robot 机器人论文速览 第六十二期】Wed, 25 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Wed, 25 Oct 2023 Totally 25 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers EquivAct: SIM(3)-Equivariant Visuomotor Policies beyond Rigid Object Manipulation Authors Jingyun Yang, Congyue Deng,…

OD机考真题搜集:不开心的小朋友

题目 游乐场里增加了一批摇摇车,非常受小朋友欢迎,但是每辆摇摇车同时只能有一个小朋友使用,如果没有空余的摇摇车,需要排队等候,或者直接离开,最后没有玩上的小朋友会非常不开心。请根据今天小朋友的来去情况,统计不开心的小朋友数量。 1.摇摇车数量为N,范围是:1≤N&…

Java的IO流-转换流

乱码问题 package com.itheima.d2;import java.io.*; import java.nio.charset.StandardCharsets;public class Test4 {public static void main(String[] args) {try (//1、创建一个文件字符输入流与源文件接通//Reader fr new FileReader("IO\\src\\itheima04.txt"…