Description

传送门

Solution

官方题解

然后我谈下个人理解。由于我们的两个条件只要任意满足,则在p的图中i有两种连边法:i->p[i],i->p[p[i]]。

我们考虑在a的图中i->a[i]。可得我们要把p图塞到a图里。

具体分析看题解吧,题解图画的很清晰呀。然后。。就各种dp+乱搞了。

Code

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
const int mod=1e9+;
int n,x;
int a[];
int in[],col[],cir[];
int len[],cnt[];
ll dp[],ans=;
int main()
{
scanf("%d",&n);
for (int i=;i<=n;i++) scanf("%d",&a[i]);
for (int i=;i<=n;i++)
{
in[a[i]]++;
x=i;while (!col[x]) {col[x]=i;x=a[x];}
if (col[x]!=i) continue;
while (!cir[x]) {cir[x]=i;x=a[x];}
}
for (int i=;i<=n;i++)
if ((cir[i]&&in[i]>)||(!cir[i]&&in[i]>)) return printf(""),; int js;
for (int i=;i<=n;i++)
{
if (in[i]) continue;
x=i;js=;
while (!cir[x]) {js++;x=a[x];}
len[x]=js;
}
int _len,fir,st,id;
for (int i=;i<=n;i++)
{
if (!cir[i]) continue;
x=i;
_len=fir=st=id=;
for(;cir[x];x=a[x])
{
id++;cir[x]=;
if(len[x])
{
if (!fir){fir=st=id;_len=len[x];}
else
{
ans=ans*((len[x]<id-st)+(len[x]<=id-st))%mod;
if (!ans) return printf(""),;st=id;
}
}
}
if (fir)
{
ans=ans*((_len<id+fir-st)+(_len<=id+fir-st))%mod;
if (!ans)return printf(""),;
}
else cnt[id]++;
}
for (int i=;i<=n;i++)
{
if (!cnt[i]) continue;
dp[]=;
if (i>&&i%)
for (int j=;j<=cnt[i];j++)
{
dp[j]=dp[j-]*%mod;
if (j>) dp[j]=(dp[j]+dp[j-]*(j-)*i%mod)%mod;
} else
for (int j=;j<=cnt[i];j++)
{
dp[j]=dp[j-];
if (j>) dp[j]=(dp[j]+dp[j-]*(j-)*i%mod)%mod;
}
ans=ans*dp[cnt[i]]%mod;
if (!ans) return printf(""),;
}
cout<<ans;
}

[agc008E]Next or Nextnext-[dp+思考题]的更多相关文章

  1. [AGC008E] Next or Nextnext [环套树森林+结论讨论]

    题面 传送门 思路 p到a 首先,本题中如果对于所有的$i$,连边$<i,p_i>$,那么可以得到一批环 那么这个题另外一点就是,可以变成连边$<i,p_{p_i}>$ 我们分 ...

  2. AGC008E Next or Nextnext(组合计数,神奇思路)

    神仙题. 排列计数,一种常见的做法是 \(i\) 向 \(p_i\) 连边. 然而这里这个就逼迫我们只能从 \(i\) 向 \(a_i\) 连边. 不过没关系,考虑从 \(i\) 向 \(p_i\) ...

  3. @atcoder - AGC008E@ Next or Nextnext

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个长度为 N 的序列 a,问有多少排列 p,满足对于每一个 ...

  4. AtCoder刷题记录

    构造题都是神仙题 /kk ARC066C Addition and Subtraction Hard 首先要发现两个性质: 加号右边不会有括号:显然,有括号也可以被删去,答案不变. \(op_i\)和 ...

  5. NOIp2018模拟赛四十

    今天太晚了...题解到时候补吧(flag立好) 成绩:100+0+0=100 感觉A题本质暴力贪心?C题一道水题我居然没做...亏爆 A:[agc011e]increasing numbers B:[ ...

  6. AGC008E:Next or Nextnext

    传送门 考虑转化成图论问题,\(i\) 向 \(p_i\) 连边,那么合法方案一定是形成了若干个简单环或自环 考虑一个环内的情况: 如果 \(a_i=p_i\),那么 \(i\) 向 \(a_i\) ...

  7. [agc011F]Train Service Planning-[线段树优化dp+神秘思考题]

    Description 传送门 Solution 请围观lhx大佬的博客(大佬写的太好了我都没有写的动力了em) Code #include<iostream> #include<c ...

  8. hdu4939 Stupid Tower Defense (DP)

    2014多校7 第二水的题 4939 Stupid Tower Defense Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 131 ...

  9. POJ2677 Tour(DP+双调欧几里得旅行商问题)

    Tour Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3929   Accepted: 1761 Description ...

随机推荐

  1. .NET版UEditor报请求后台配置项http错误,上传功能无法使用的错误解决

    在配置UEditor的时候,总是报请求后台配置项http错误,上传功能将不能正常使用!,上传图片等功能都无法使用.折磨了一下午,逐步调试发现了错误原因:

  2. Intel Nehalem微架构Calpella平台机型Windows XP系统下如何开启AHCI硬盘工作模式(XP系统下如何加载AHCI驱动)

    问题描述用户来电表示使用IDE模式安装XP系统后开启AHCI模式会出现开机蓝屏重启的问题,咨询如何在XP下加载AHCI驱动,以便开启BIOS中AHCI选项来发挥硬盘的最佳性能   问题分析 Windo ...

  3. sonarQube环境搭建--常见问题及解决

    环境配置:MySQL Server 5.7     Jdk1.8 1.安装mysql数据库(默认安装一路默认到底,注意不要先新建用户账号) a) Mysql 环境变量配置: b)新增my.ini文件: ...

  4. [沫沫金]JavaWeb企业信息系统,增加操作记录、数据库记录

    背景 系统出现数据莫名丢失,业务人员的反馈无法复现问题.纠结了很久,最终老板发话要记录操作,通过日志进行分析重现 环境 SSH框架 目标 1.记录访问了那个方法,使用的参数及返回的内容 2.记录新增. ...

  5. Python中网络编程对 listen 函数的理解

    listen函数的第一个参数时SOCKET类型的,该函数的作用是在这个SOCKET句柄上建立监听,至于有没有客户端连接进来,就需要accept函数去进行检查了,accept函数的第一个参数也是SOCK ...

  6. 3种web会话管理方式

    一.基于server端的session管理 在早期web应用中,通常使用服务端session来管理用户的会话.快速了解服务端session: 1) 服务端session是用户第一次访问应用时,服务器就 ...

  7. 4-3 R语言函数 mapply

    #mapply(函数/函数名,数据,函数相关的函数) > list(rep(1,4),rep(2,3),rep(3,2),rep(4,1)) [[1]] [1] 1 1 1 1 [[2]] [1 ...

  8. 谷歌希望让 Swift 成为安卓的优先选择,以取代由 Oracle 开发的 Java 程序语言。

    http://news.coolban.com/Web/Index/land/app/2/id/405239

  9. 1015. [JSOI2008]星球大战【并查集】

    Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的 机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通 ...

  10. mongodb的学习-2-简介

    http://www.runoob.com/mongodb/mongodb-intro.html 什么是MongoDB ? MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系 ...