P7736-[NOI2021]路径交点【LGV引理】

正题

题目链接:https://www.luogu.com.cn/problem/P7736


题目大意

kkk层的图,第iii层有nin_ini个点,每层的点从上到下排列,层从左到右排列。再给出连接相邻层的一些有向边(从iii层连向i+1i+1i+1层)。
对于n1n_1n1层每个点作为起点同时出发走到不同的nkn_knk层的点的所有路径方案中,交点数量为偶数的减去为奇数的方案有多少个。

1≤k≤100,2≤n1≤100,n1=nk,n1≤ni≤2×n1,1≤T≤51\leq k\leq 100,2\leq n_1\leq 100,n_1=n_k,n_1\leq n_i\leq 2\times n_1,1\leq T\leq 51k100,2n1100,n1=nk,n1ni2×n1,1T5


解题思路

分析一下,若第111层起点1,21,21,2分别对应终点1,21,21,2,记fi,1/2f_{i,1/2}fi,1/2表示1/21/21/2在第iii层的位置。中间某个位置他们路径有了交点,那么一定满足他们存在一层使得fi,1>fi,2f_{i,1}>f_{i,2}fi,1>fi,2但是因为f1,1<f1,2f_{1,1}<f_{1,2}f1,1<f1,2fn,1<fn,2f_{n,1}<f_{n,2}fn,1<fn,2也就是说明前后都各有一个交点。
拓展一下也就是说中间的路径走法不影响交点的奇偶性,只有起点和终点会影响奇偶性。再进一步说,路径交点的奇偶性就是起点对应终点的排列pip_ipi的逆序对数量的奇偶性。

设排列ppp表示起点iii会走到终点pip_ipiσ(p)\sigma(p)σ(p)表示排列ppp的逆序对数量,w(p)w(p)w(p)表示排列ppp的路径方案
那么答案就是
∑(−1)σ(p)w(p)\sum (-1)^{\sigma(p)}w(p)(1)σ(p)w(p)
发现和LGVLGVLGV引理的式子一模一样,直接上就好了

时间复杂度O(T(k2n+n3))O(T(k^2n+n^3))O(T(k2n+n3))


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cctype>
#include<vector>
#define ll long long
using namespace std;
const ll N=210,P=998244353;
ll T,k,n[N],m[N],f[N][N],a[N][N];
vector<int> G[N][N];
ll read(){ll x=0,f=1;char c=getchar();while(!isdigit(c)){if(c=='-')f=-f;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}
ll power(ll x,ll b){ll ans=1;while(b){if(b&1)ans=ans*x%P;x=x*x%P;b>>=1;}return ans;
}
ll det(ll n){ll ans=1,f=1;for(ll i=1;i<=n;i++){for(ll j=i;j<=n;j++)if(a[j][i]){if(j!=i)swap(a[j],a[i]),f=!f;break;}ll inv=power(a[i][i],P-2);ans=ans*a[i][i]%P;for(ll j=i;j<=n;j++)a[i][j]=a[i][j]*inv%P;for(ll j=i+1;j<=n;j++){ll rate=P-a[j][i];for(ll k=i;k<=n;k++)(a[j][k]+=rate*a[i][k]%P)%=P;}}return f?ans:((P-ans)%P);
}
signed main()
{T=read();while(T--){k=read();for(ll i=1;i<=k;i++)n[i]=read();for(ll i=1;i<k;i++)m[i]=read();for(ll i=1;i<k;i++){for(ll j=1;j<=m[i];j++){ll x=read(),y=read();G[i][x].push_back(y);}}for(ll i=1;i<=n[k];i++){f[k][i]=1;f[k][i-1]=0;for(ll j=k-1;j>=1;j--)for(ll x=1;x<=n[j];x++){f[j][x]=0;for(ll p=0;p<G[j][x].size();p++)(f[j][x]+=f[j+1][G[j][x][p]])%=P;}for(ll j=1;j<=n[1];j++)a[j][i]=f[1][j];}f[k][n[k]]=0;printf("%lld\n",det(n[1]));for(ll i=1;i<=k;i++)for(ll j=1;j<=n[i];j++)G[i][j].clear();}return 0;
}

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

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

相关文章

第1节 连通性强连通、割点和桥(一)

文章目录无向图割点、桥、双连通分量Tarjan算法求割点和桥&#xff08;割边&#xff09;代码&#xff1a;边双连通分量 和 点双连通分量代码边双连通分量 和 点双连通分量 的缩点有向图的弱连通与强连通强连通分量Kosaraju算法Tarjan算法代码&#xff1a;无向图割点、桥、双连通…

暗黑破坏神(背包)(内部模拟)

不开longlong见祖宗&#xff01;&#xff01;&#xff01; scanf要打成lld&#xff01;&#xff01;&#xff01;&#xff01; 解析 分层背包的类板子题&#xff0c;更新dp过程中记录路径&#xff0c;最后递归输出即可 然而—— 一开始被卡成了27分&#xff01;&#xff01;…

UOJ#454-[UER #8]打雪仗【通信题】

正题 题目链接:https://uoj.ac/problem/454 题目大意 AliceAliceAlice有一个长度为2n2n2n的010101串&#xff0c;BobBobBob有nnn个在[1,2n][1,2n][1,2n]位置的下标表示它想要得到010101串中这些位置的值&#xff0c;现在两个人可以向对方传输不超过mmm个0/10/10/1字符&#xf…

第1节 连通性强连通、割点和桥 例题

NC15707 可达性 题目&#xff1a; 给出一个 0 ≤ N ≤ 105 点数、0 ≤ M ≤ 105 边数的有向图&#xff0c; 输出一个尽可能小的点集&#xff0c;使得从这些点出发能够到达任意一点&#xff0c;如果有多个这样的集合&#xff0c; 输出这些集合升序排序后字典序最小的。 题解:…

最大乘积(记忆化搜索)

题目描述 给一段数列&#xff0c;用k个乘号分开&#xff0c;求所得最大值 n<10! 解析 这样就不用写高精啦 枚举第一个乘号的位置递归记忆化搜索即可 问题&#xff01; 一开始边界条件写了一个这个&#xff1a; if(n-st<k) return -2e15;这样使这样的情况强制非法 但…

Loj#6503-「雅礼集训 2018 Day4」Magic【分治NTT】

正题 题目链接:https://loj.ac/p/6503 题目大意 nnn张卡mmm种&#xff0c;第iii种卡有aia_iai​张&#xff0c;求所有排列中有kkk对相邻且相同的卡牌。 1≤n≤105,0≤k≤105,1≤m≤20000,∑i1main1\leq n\leq 10^5,0\leq k\leq 10^5,1\leq m\leq 20000,\sum_{i1}^ma_in1≤n≤1…

连通性(相关练习)

文章目录NC20603 [ZJOI2007]最大半连通子图题目&#xff1a;题解&#xff1a;代码&#xff1a;NC50403 嗅探器题目&#xff1a;题解&#xff1a;代码&#xff1a;NC51269 Network of Schools题目&#xff1a;题解&#xff1a;代码&#xff1a;NC106972 Cow Ski Area题目&#x…

ASP.NET Core WebAPI中使用JWT Bearer认证和授权

为什么是 JWT BearerASP.NET Core 在 Microsoft.AspNetCore.Authentication 下实现了一系列认证, 包含 Cookie, JwtBearer, OAuth, OpenIdConnect 等,Cookie 认证是一种比较常用本地认证方式, 它由浏览器自动保存并在发送请求时自动附加到请求头中, 更适用于 MVC 等纯网页系统的…

判断溢出(ybtoj-字符串)

文章目录题目描述输入格式输出格式样例输入样例输出数据范围解析注意代码题目描述 我们将给你一些数和一个数据类型&#xff0c;你需要判断&#xff0c;如果将这些数连续相乘起来&#xff0c;将会在第几个数出现溢出的情况。 输入格式 多组数据。 第一行只有一个整数&#x…

2021“MINIEYE杯”中国大学生算法设计超级联赛(8)(1002,1004,1006,1009)

前言 依旧是白嫖账号&#xff0c;只打了一些题/kk 正题 1002 Buying Snacks 题目大意 nnn个物品&#xff0c;每个可以买一次也可以不买&#xff0c;如果买需要选择1/21/21/2块钱的&#xff0c;然后也可以相邻两个一起买并且减少一块的花销&#xff0c;求恰好用掉mmm块钱的方案…

分羊(区间dp:分治与决策单调性优化)

文章目录题目描述样例输入样例输出解析代码题目描述 给你一个数列&#xff0c;分成m段&#xff0c;每段的价值为相同数对的对数 求最小价值和 样例输入 10 2 1 2 1 2 1 2 1 2 1 2 样例输出 8 解析 容易想到区间dp 定义dp[i][j]:把前i个数分成j段的最小价值 那么枚举最后一段…

网络流专题(最大流与费用流)(一)

流量网络 • 想要将一些水从S运到T&#xff0c;必须经过一些水站&#xff0c;链接水站的是管道&#xff0c;每条管道都有它的最大能容纳的水量&#xff0c;求最多S到T能流多少流量。 基本概念 • 这是一个典型的网络流模型。我们先了解网络流的有关定义和概念。 • 若有向图G(…

eShopOnContainers 看微服务 ①:总体概览

一、简介eShopOnContainers是一个简化版的基于.NET Core和Docker等技术开发的面向微服务架构的参考应用。该参考应用是一个简化版的在线商城/电子商务微服务参考示例应用。其包含基于浏览器的Web应用、基于Xamarin的Android、IOS、Windows/UWP 移动应用&#xff0c;以及服务端应…

【模板】文艺平衡树

题目链接 题目描述 您需要写一种数据结构&#xff08;可参考题目标题&#xff09;&#xff0c;来维护一个有序数列。 其中需要提供以下操作&#xff1a;翻转一个区间&#xff0c;例如原有序序列是 543215\ 4\ 3\ 2\ 15 4 3 2 1&#xff0c;翻转区间是 [2,4][2,4][2,4] 的话&a…

P4022-[CTSC2012]熟悉的文章【广义SAM,dp,单调队列】

正题 题目链接:https://www.luogu.com.cn/problem/P4022 题目大意 给出mmm个模板串。 然后nnn次询问给出一个串SSS要求找到一个最大的LLL使得能够将SSS超过90%90\%90%的部分拿出来分后每个串都是某个模板串的子串且长度不小于LLL。 所有输入文件长度不超过 110000011000001…

猜数(二分、线段树)

题目描述 对于一个长度为n的数列给出m个描述 每一个描述给出一个区间[a,b]的最小值的x 求从第几个描述开始矛盾 解析 本题关键是一个关于矛盾的充要条件&#xff1a; 如果存在一个最小值x&#xff0c;其所在的区间的交集&#xff08;就是它真正可以存在的区间&#xff09;是…

网络流专题(最大流与费用流)例题总结

文章目录NC 106056 poj1459 Power Network题目大意&#xff1a;题解&#xff1a;NC213817 [网络流24题]最小路径覆盖问题题目&#xff1a;题解&#xff1a;例2&#xff1a;NC213818 [网络流24题]魔术球问题题目&#xff1a;题解&#xff1a;方法2&#xff1a;NC 213820 [网络流…

FHQ Treap

FHQ Treap 主要通过 merge⁡\operatorname{merge}merge 和 spilt⁡\operatorname{spilt}spilt 两个核心操作和其他辅助函数来实现。 本文用 lcxlc_xlcx​ 表示 xxx 的左儿子&#xff0c;rcxrc_xrcx​ 表示 xxx 的右儿子&#xff0c;datxdat_xdatx​ 表示 xxx 的随机优先级 me…

从.Net框架Bug的提交到修复代码成功合并到.NET CoreFX主线

从发现.NET Framework中SmtpClient的Bug并拿出解决方案&#xff0c;然后给微软开发者社区提交Bug开始&#xff0c;总共耗时一个多月&#xff0c;对Bug修复的代码最终被采纳&#xff0c;现已合并到.NET Core Libraries (CoreFX)主线中。修复记录https://github.com/dotnet/coref…

P2469-[SDOI2010]星际竞速【费用流】

正题 题目链接:https://www.luogu.com.cn/problem/P2469 题目大意 给出nnn个点mmm条边的一张无向图&#xff0c;你每次可以选择一条s−>ts->ts−>t的路径花费AsA_sAs​的代价出发&#xff0c;而且只能从编号小的点到编号大的点走&#xff0c;求最小花费使得所有点被…