CF1923E Count Paths 题解】的更多相关文章

前言 这道题目是道好题. 第一次div-2进前100,我太弱了. 题解 公式推导 我们观察这个式子. \[(a_i+a_j)(a_i^2+a_j^2)\equiv k \mod p\] 感觉少了点什么,我们想到两边同时乘一个\((a_i-a_j)\). 于是它变成了: \[(a_i^2-a_j^2)(a_i^2+a_j^2) \equiv k(a_i-a_j) \mod p\] 也就是: \[a_i^4-a_j^4 \equiv k(a_i-a_j) \mod p\] 把\(k\)乘进去变成:…
CF293B Distinct Paths 题意 给定一个\(n\times m\)的矩形色板,有kk种不同的颜料,有些格子已经填上了某种颜色,现在需要将其他格子也填上颜色,使得从左上角到右下角的任意路径经过的格子都不会出现两种及以上相同的颜色.路径只能沿着相邻的格子,且只能向下或者向右. 计算所有可能的方案,结果对 \(1000000007 (10^9 + 7)\) 输入及输出格式 输入格式 第一行,三个整数$ n, m, k (1 \le n, m \le 1000, 1 \le k \le…
"Shortest" pair of paths 题目大意 给出 \(n\) 个点,\(m\) 条边,除第一个点和最后一个点外,其他所有的点都只能被经过一次,要求找到两条从第一个点到最后一个点的路径,使其长度和最小. 分析 拿到这道题,通过观察数据范围和问题模式,其实很容易想到这是一道可以通过网络流来解决的问题,网络流确实非常擅长通过连边的流量限制来表示这种对经过次数的限制. 本题就是一个非常明显的最小费用流,其建图套路也比较容易想到: 拆点,将每个点拆成入点和出点,除了第一个点与最后…
http://poj.org/problem?id=3068 题目大意: 从0-n-1找到两条边和点都不相同(除了0和n-1外)的最小费用路径. ———————————————————————————— POJ2135魔改版. 按照那题的思路并且把点拆成中间连一条容量为1的边即可. 切了切了. #include<cstdio> #include<iostream> #include<queue> #include<cstring> #include<a…
http://poj.org/problem?id=3177 明显要求桥的一道题. (因为有桥就说明只能从那一条路走,换句话说就是只有一种方法) 求完桥后按照结论(加几条边成双连通图的结论,不会请baidu)就可以输出ans啦! (为此学了一下新的桥的求法……原来的那个常数太大了) #include<stack> #include<cstdio> #include<cstring> #include<iostream> #include<algorit…
题目链接 题目大意 给你n个点(\(\sum n<=2e5\)),n条边,求有多少条路径 题目思路 要明白任意两点的路径只能是1条或者2条 先topo找环(双向边也是可以找的) 然后把环上的每个点当作一棵树的根,dfs求每棵树的节点 设第一颗树的节点为tree[i]...以此类推 pre[i]=tree[1]+.....tree[i-1]+tree[i] 显然若两点位于不同子树,则路径为2,位于同一子树则路径为1 代码 #include<set> #include<map>…
Unique Paths 题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/unique-paths/description/ Description A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The robot can only move either down or right at any po…
CF981H K Paths 题解 一道不错的分治ntt题目 题目稍微转化一下,就是所有k条链的存在交,并且交的部分都被覆盖k次 所以一定是两个点,之间路径选择k次,然后端点两开花 f[x]表示x子树内往下延伸k条链(可以停在x)的方案数(有标号) 每个子树选择一个或者不选择,最多一共选择k个,dp是O(n^2)的, 考虑生成函数,其实就是: 而 统计答案? 直接两两点对f相乘肯定不行,因为f仅仅是子树 考虑枚举x作为lca统计 如果是拐弯的链,树形DP即可. 而如果是直上直下的链, 对于不同子…
(A) Even Subset Sum Problem 题解:因为n非常非常小,直接暴力枚举所有区间即可. #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> pii; typedef double db; int t,l,r,n,a[110],s[110]; int main(){ cin>>t; while(t--){ cin>>…
CF14D Two Paths题解 题目链接 传送门 题意简述 给定一棵树,找出两条不经过相同点的最长路径,使得他们的长度乘积最大. 题目分析 首先,如果在一棵树上,两条路径没有共同的点,那么这两条路径对应的两个深度更小的端点之间一定有唯一一条路径,我们只需要删掉这条路径上任意一条边,就可以分离这两个路径. 看到两秒的时间限制和 \(n \le 200\) 的数据范围,我们可以想到暴力删除每一条边,在分成的两颗子树中找到直径即可. 关于如何找到直径,有两种方法,请参考oi_wiki中相关内容 此…