#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$的房间,一些位置是房间,另一些位置是柱子,相邻两个房间之间有墙,问有多少种方案可以打通一些墙把所有房间连成一棵树,柱子不可以打通 题解:矩阵树定理,把房间当点,墙 ...
随机推荐
- .Net 6 WebAPI 使用JWT进行 授权认证配置
.Net 6 WebAPI 使用JWT进行 授权认证 1.安装组件(Nuget) Microsoft.AspNetCore.Authentication.JwtBearer 2.Program.cs ...
- SBI信息反馈法
https://baijiahao.baidu.com/s?id=1605128367255769158&wfr=spider&for=pc
- 项目实战:Qt+OpenCV图像处理与识别算法平台
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- chrome浏览器配置自定义搜索引擎
chrome谷歌浏览器配置自定义搜索引擎 放弃百度搜索已经酝酿许久,现在搜索结果简直不忍直视.如果你想放弃使用百度搜索,并转向其他搜索引擎,头条搜索可能是一个不错的选择. 使用以下方式可以丝滑的使用其 ...
- 【Azure API 管理】APIM中证书更新问题
问题描述 每一年到期更新域名证书,APIM会中断服务,请问如何不中断服务? 问题解答 Azure API 管理允许在受信任的根证书和中间证书存储中的计算机上安装 CA 证书,分配证书的过程可能需要 1 ...
- 【Azure 应用服务】在App Service 中如何通过Managed Identity获取访问Azure资源的Token呢? 如Key Vault
问题描述 当App Service启用了Managed Identity后,Azure中的资源就可以使用此Identity访问. 如果需要显示的获取这个Token,如何实现呢? 问题解答 在App S ...
- Isito 入门(二):Istio 的部署
本教程已加入 Istio 系列:https://istio.whuanle.cn 目录 2,部署 Istio 安装 Helm 部署 istio-base 部署 istiod 部署 istio-ingr ...
- MAUI发布APK初体验
目的 很早就有想编写安卓程序玩玩的念头了,所以这次学习将MAUI程序生成apk包来玩. 本文apk下载地址:https://azrng.lanzouv.com/iBQRe0eeg8wf ,内容很简单, ...
- RocketMQ(8) 消费幂等
1 什么是消费幂等 当出现消费者对某条消息重复消费的情况时,重复消费的结果与消费一次的结果是相同的,并且多次消 费并未对业务系统产生任何负面影响,那么这个消费过程就是消费幂等的. 幂等:若某操作执行多 ...
- C++ //vector容器嵌套容器
1 //vector容器嵌套容器 2 #include <iostream> 3 #include <string> 4 #include<fstream> 5 # ...