[agc008E]Next or Nextnext-[dp+思考题]
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+思考题]的更多相关文章
- [AGC008E] Next or Nextnext [环套树森林+结论讨论]
题面 传送门 思路 p到a 首先,本题中如果对于所有的$i$,连边$<i,p_i>$,那么可以得到一批环 那么这个题另外一点就是,可以变成连边$<i,p_{p_i}>$ 我们分 ...
- AGC008E Next or Nextnext(组合计数,神奇思路)
神仙题. 排列计数,一种常见的做法是 \(i\) 向 \(p_i\) 连边. 然而这里这个就逼迫我们只能从 \(i\) 向 \(a_i\) 连边. 不过没关系,考虑从 \(i\) 向 \(p_i\) ...
- @atcoder - AGC008E@ Next or Nextnext
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个长度为 N 的序列 a,问有多少排列 p,满足对于每一个 ...
- AtCoder刷题记录
构造题都是神仙题 /kk ARC066C Addition and Subtraction Hard 首先要发现两个性质: 加号右边不会有括号:显然,有括号也可以被删去,答案不变. \(op_i\)和 ...
- NOIp2018模拟赛四十
今天太晚了...题解到时候补吧(flag立好) 成绩:100+0+0=100 感觉A题本质暴力贪心?C题一道水题我居然没做...亏爆 A:[agc011e]increasing numbers B:[ ...
- AGC008E:Next or Nextnext
传送门 考虑转化成图论问题,\(i\) 向 \(p_i\) 连边,那么合法方案一定是形成了若干个简单环或自环 考虑一个环内的情况: 如果 \(a_i=p_i\),那么 \(i\) 向 \(a_i\) ...
- [agc011F]Train Service Planning-[线段树优化dp+神秘思考题]
Description 传送门 Solution 请围观lhx大佬的博客(大佬写的太好了我都没有写的动力了em) Code #include<iostream> #include<c ...
- hdu4939 Stupid Tower Defense (DP)
2014多校7 第二水的题 4939 Stupid Tower Defense Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 131 ...
- POJ2677 Tour(DP+双调欧几里得旅行商问题)
Tour Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3929 Accepted: 1761 Description ...
随机推荐
- 【Kendo UI系列开发使用笔记】01-简单介绍
ps:接触telerik出品的kendo ui系列已经快有一年了,使用过程中也在不断踩坑填坑.这套UI用起来还是非常爽的,尤其asp.net mvc版的配合lambda表达式来配置参数非常流畅.这次对 ...
- jquery中的ajax方法
$.ajax()方法详解 jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为Strin ...
- [IIS] [PHP] 500.19 随机出现
微信确认有BUG: https://support.microsoft.com/en-au/help/3007507/-http-error-500.19-error-when-you-browse- ...
- 检查windows系统支持的密码套件
Windows 10客户端及Windows server 2016 服务器可以使用powershell 命令获得系统支持的密码套件列表,禁用启用相应的密码套件. #命令链接:https://techn ...
- 北美IT求职攻略
http://www.followmedoit.com/bbs/forum.php?mod=viewthread&tid=19&extra=page%3D1 身在北美,想留下来并能过得 ...
- 【原创】Qt 使用ODBC driver 连接SQL Server
最近在做数据库的课程设计.第一个需要解决的问题是使用什么工具来实现这个系统.经过一番资料查找,决定使用SQL Server Express 2012作为服务器,使用Qt作为编写客户端程序语言.问题是c ...
- 解决windows10下无法安装.net framework 3.5,错误代码0x800F081F
1.下载 NET Framework 3.5的安装包netfx3.cab: http://download.windowsupdate.com/d/msdownload/update/software ...
- 关于Matlab里面的四个取整(舍入)函数:Floor, Ceil, Fix, Round的解释(转)
转自http://blog.sina.com.cn/s/blog_48ebd4fb010009c2.html floor:朝负无穷方向舍入 B = floor(A) rounds the elem ...
- maven项目中引入Jstl
<dependency> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl-api& ...
- ZT 互联网——降级论
互联网——降级论 投递人 Astar 发布于 2012-07-06 09:54 评论(110) 有30531人阅读 原文链接 [收藏] « » 文/meditic 几乎一年没有写博客了,说没时间 ...