#Tarjan#洛谷 5676 [GZOI2017]小z玩游戏
分析
可能玩两次也就是形成环即是Tarjan缩点后在同一个强连通分量
如果按照游戏连边数量将达到\(O(n^2)\),当中其实有很多边可以共用,
考虑\(i\)连向\(i\)的倍数,以及有趣程度连接兴奋程度,其实连接倍数可以优化一下,
比如说\(i\)连向\(j\),\(j\)连向\(k\),那么\(i\)连向\(k\)的边完全可以被省掉,
那么对于每个数连接其与一个质数的乘积,根据埃氏筛建的边应该为\(O(nloglogn)\)
实际上仍然达不到上界,总边数在\(4n\)以内
代码
#include <cstdio>
#include <cctype>
#include <cstring>
#define rr register
using namespace std;
const int M=100000,N=M|15; struct node{int y,next;}e[N<<2];
int dfn[N],stac[N],low[N],et,eT,v[N],St[N],Ed[N],ans;
int Cnt,col[N],Top,as[N],prime[N],bs[N],n,tot,cnt;
inline signed iut(){
rr int ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
inline void print(int ans){
if (ans>9) print(ans/10);
putchar(ans%10+48);
}
inline signed min(int a,int b){return a<b?a:b;}
inline void add(int x,int y){e[++et]=(node){y,as[x]},as[x]=et;}
inline void tarjan(int x){
dfn[x]=low[x]=++tot,stac[++Top]=x,v[x]=1;
for (rr int i=as[x];i;i=e[i].next)
if (!dfn[e[i].y]){
tarjan(e[i].y);
low[x]=min(low[x],low[e[i].y]);
}else if (v[e[i].y])
low[x]=min(low[x],dfn[e[i].y]);
if (dfn[x]==low[x]){
rr int y; ++cnt;
do{
y=stac[Top--];
col[y]=cnt,v[y]=0;
}while (y!=x);
}
}
signed main(){
for (rr int i=2;i<=M;++i){
if (!v[i]) prime[++Cnt]=i;
for (rr int j=1;j<=Cnt&&prime[j]<=M/i;++j){
v[i*prime[j]]=1;
if (i%prime[j]==0) break;
}
}
for (rr int i=1;i<=M;++i)
for (rr int j=1;j<=Cnt&&prime[j]<=M/i;++j)
add(i,i*prime[j]);
memcpy(bs,as,sizeof(as)),eT=et;
for (rr int T=iut();T;--T){
memcpy(as,bs,sizeof(bs)),et=eT;
memset(dfn,0,sizeof(dfn));
memset(v,0,sizeof(v));
memset(col,0,sizeof(col));
memset(low,0,sizeof(low));
n=iut(),ans=tot=0;
for (rr int i=1;i<=n;++i) St[i]=iut();
for (rr int i=1;i<=n;++i) Ed[i]=iut();
for (rr int i=1;i<=n;++i) add(St[i],Ed[i]);
tarjan(1);
for (rr int i=1;i<=n;++i)
if (col[St[i]]==col[Ed[i]]) ++ans;
print(ans),putchar(10);
}
return 0;
}
#Tarjan#洛谷 5676 [GZOI2017]小z玩游戏的更多相关文章
- P5676 [GZOI2017]小z玩游戏【Tarjan】
小z玩游戏 Tarjan算是板子题吧,但是要稍微做一些修改,建边需要多考虑,建立"虚点". 题目描述 小 z 很无聊. 小 z 要玩游戏. 小 z 有\(N\)个新游戏,第\(i\ ...
- 二分图【洛谷P2175】 小Z的游戏分队
P2175 小Z的游戏分队 小Z受不了寂寞,准备举办一次DOTA比赛,为了能让ACM班全部都参加比赛,他还特制了一张DOTA地图能够支持任意多人打任意多人. 现在问题来了,怎么把这么多人分成两队?小Z ...
- P5676 [GZOI2017]小z玩游戏 Tarjan+优化建图
题目描述 分析 一开始看到这道题,首先想到的就是建好边后跑一个Tarjan缩点,将siz大于1的节点统计一下,输出结果 Tarjan非常显然易得,关键就是怎么建边 比较好想的一种思路就是枚举每一个兴奋 ...
- 【题解】 [GZOI2017]小z玩游戏
题目戳我 \(\text{Solution:}\) 考虑建图.操作可以看作对\(1\)进行的操作,于是有以下运行过程: \(1\to w[i]\to e[i]\to...\) 考虑倍数,一个数可以走到 ...
- 【洛谷5月月赛】玩游戏(NTT,生成函数)
[洛谷5月月赛]玩游戏(NTT,生成函数) 题面 Luogu 题解 看一下要求的是什么东西 \((a_x+b_y)^i\)的期望.期望显然是所有答案和的平均数. 所以求出所有的答案就在乘一个逆元就好了 ...
- 神奇的建图方式(Tarjan)——小z玩游戏
原题来自与:洛谷 P5676(GZOI2017) 链接: https://www.luogu.com.cn/problem/P5676 题面: 题意比较明显,如果已经建好了边,那么跑个Tarjan ...
- 洛谷 P4279 [SHOI2008]小约翰的游戏 解题报告
P4279 [SHOI2008]小约翰的游戏 题目描述 小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有\(n\)堆石子,小约翰和他的哥哥轮流取石子,每个人取的时候,可以随意选择一堆石子,在这堆石子 ...
- 洛谷5月月赛T30212 玩游戏 【分治NTT + 多项式求ln】
题目链接 洛谷T30212 题解 式子很容易推出来,二项式定理展开后对于\(k\)的答案即可化简为如下: \[k!(\sum\limits_{i = 0}^{k} \frac{\sum\limits_ ...
- [bzoj4443] [loj#2006] [洛谷P4251] [Scoi2015]小凸玩矩阵
Description 小凸和小方是好朋友,小方给小凸一个 \(N \times M\)( \(N \leq M\) )的矩阵 \(A\) ,要求小秃从其中选出 \(N\) 个数,其中任意两个数字不能 ...
- [洛谷P4111][HEOI2015]小Z的房间
题目大意:有一个$n\times m$的房间,一些位置是房间,另一些位置是柱子,相邻两个房间之间有墙,问有多少种方案可以打通一些墙把所有房间连成一棵树,柱子不可以打通 题解:矩阵树定理,把房间当点,墙 ...
随机推荐
- [BUUCTF][Web][极客大挑战 2019]EasySQL 1
打开靶机对应的url 界面显示需要输入账号和密码 分别在两个输入框尝试加单引号尝试是否有sql注入的可能,比如 123' 发现两个框可以注入,因为报了个错误信息 You have an error i ...
- 一个简单的Dockerfile多阶段构建go项目
From golang:1.16-alpine3.13 AS builder WORKDIR /app COPY . . RUN go build -o main main.go From alpin ...
- TLS数据包重组
TLS解密 参考以下链接:Wireshark 解密 TLS报文_在线tls解密-CSDN博客 总结: 配置环境变量 wireshark首选项配置 TLS解密例子 Frame 2700 Frame 27 ...
- 一文读懂图数据库 Nebula Graph 访问控制实现原理
摘要:数据库权限管理对大家都很熟悉,然而怎么做好数据库权限管理呢?在本文中将详细介绍 Nebula Graph 的用户管理和权限管理. 本文首发 Nebula Graph 博客:https://neb ...
- 使用Order By NULL 解决 group by后自动排序,优化Sql性能
使用Order By NULL 解决 group by后自动排序,优化Sql性能 对于 Group by 后的结果,Mysql搜索引擎会将结果按照Group by 的字段按照升序,自动排序,例如: t ...
- 19 SWERC 2022-2023 - Online Mirror (Unrated, ICPC Rules, Teams Preferred)L. Controllers(数学公式+瞎搞)
L. Controllers 思路: #include <bits/stdc++.h> #define int long long #define rep(i, a, b) for(int ...
- 解决windows11远程连接阿里云Centos7
本地连接CentOs7时报错 Permission denied (publickey,gssapi-keyex,gssapi-with-mic). 网上大部分说的是去修改 vim /etc/ss ...
- vue 的属性展开 props v-bind 记得带key
<el-table-column v-for="column in columns" :key="column.prop" v-bind="co ...
- 手把手的使用Toolkit插件在诗情画意中完成AI诗朗诵
本文分享自华为云社区<[云驻共创]手把手的使用Toolkit插件在诗情画意中完成AI诗朗诵>,作者: 红目香薰. 云原生时代,开发者们的编程方式.编程习惯都发生了天翻地覆的变化,大家逐渐地 ...
- ubuntu20 宽带连接
nmcli connection edit type pppoe con-name "连接名称" set pppoe.username 宽带账号 set pppoe.passwor ...