HDU 6116 路径计数】的更多相关文章

HDU 6116 路径计数 普通生成函数常用于处理组合问题,指数生成函数常用于处理排列问题. 考虑 对于 $ a $ 个 $ A $ 分为很多堆,这么分的方案数是 $ C_{a-1}^{i-1} $ 然后对于每一堆我们看成一个数来放,并且所有堆都这样做,这样的话总的方案数量是 $ \frac{(i+j+k+l)!}{i!j!k!l!} $ 就算所有一堆看成的数的排列是不存在相邻相等的,至少都有 $ n-i-j-k-l $ 对相邻的相同的数. 然后就可以容斥了,枚举 $ i+j+k+l $ 直接计…
Different Circle Permutation Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 218    Accepted Submission(s): 106 Problem Description You may not know this but it's a fact that Xinghai Square is…
1610 路径计数 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题   路径上所有边权的最大公约数定义为一条路径的值. 给定一个有向无环图.T次修改操作,每次修改一条边的边权,每次修改后输出有向无环图上路径的值为1的路径数量(对1,000,000,007取模). Input 第一行两个整数n和m,分别表示有向无环图上的点数和边数.(1<=n<=100,1<=m<=50,000) 第2~m+1行每行三个数x,y,z,表示有一条从x到y权值为z的边.…
Birthday Toy Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 644    Accepted Submission(s): 326 Problem Description AekdyCoin loves toys. It is AekdyCoin’s Birthday today and he gets a special “…
X 国的一个网络使用若干条线路连接若干个节点.节点间的通信是双向的.某重要数据包,为了安全起见,必须恰好被转发两次到达目的地.该包可能在任意一个节点产生,我们需要知道该网络中一共有多少种不同的转发路径. 源地址和目标地址可以相同,但中间节点必须不同. 如下图所示的网络. 1 -> 2 -> 3 -> 1 是允许的 1 -> 2 -> 1 -> 2 或者 1 -> 2 -> 3 -> 2 都是非法的. Input 输入数据的第一行为两个整数N M,分别表…
今天考试的时候遇到了一道题需要路径计数,然而蒟蒻从来没有做过,所以在考场上真的一脸懵逼.然后出题人NaVi_Awson说明天考试还会卡SPFA,吓得我赶紧又来学一波堆优化的Dijkstra(之前只会SPFA... 堆优化Dijkstra 其实Dijkstra的思想很简单.SPFA是以边为基础的最短路松弛,那么Dijkstra恰好相反,是以点为基础的最短路松弛.划分两个点的集合,一个是已经松弛的点集合,一个是未松弛的点集合,每次从已松弛的点集合中找当前路径最小的点来松弛与它相连的未松弛的点.但是如…
P1176 路径计数2 题目描述 一个N×N的网格,你一开始在(1,1),即左上角.每次只能移动到下方相邻的格子或者右方相邻的格子,问到达(N,N),即右下角有多少种方法. 但是这个问题太简单了,所以现在有M个格子上有障碍,即不能走到这M个格子上. 输入输出格式 输入格式: 输入文件第1行包含两个非负整数N,M,表示了网格的边长与障碍数. 接下来M行,每行两个不大于N的正整数x,y.表示坐标(x,y)上有障碍不能通过,且有1≤x,y≤n,且x,y至少有一个大于1,并请注意障碍坐标有可能相同. 输…
hdu 6010 路径交(lca + 线段树) 题意: 给出一棵大小为\(n\)的树和\(m\)条路径,求第\(L\)条路径到第\(R\)条路径的交的路径的长度 思路: 本题的关键就是求路径交 假设存在两条路径(a,b),(c,d),那它们的交是怎样的呢 画图看看,分三种情况 1.路径不存在交集 2.(c,d)交(a,b)路径的一边(由lca(a,b)将路径划分成两部分,假设这里交在a的一侧) 3.(c,d)交(a,b)路径的两边 可以看出路径交若存在,这其两端点一定在lca(a,c),lca(…
牛客网暑期ACM多校训练营(第一场) A.Monotonic Matrix 这个题就是给你一个n*m的矩阵,往里面填{0,1,2}这三种数,要求是Ai,j⩽Ai+1,j,Ai,j⩽Ai,j+1 ,问你一共有几种填法. 变形一下就会发现其实是走非交叉格子路径计数,限制条件下的非降路径问题.就是从左上到右下走格子路径.从上到下为0——n,从左到右为0——m. 考虑 01 和 12 的分界线,是 (n, 0) 到 (0, m) 的两条不相交(可重合)路径,因为起点重合了,所以把其中一条路径往左上平移了…
P1176 路径计数2 题目描述 一个N \times NN×N的网格,你一开始在(1,1)(1,1),即左上角.每次只能移动到下方相邻的格子或者右方相邻的格子,问到达(N,N)(N,N),即右下角有多少种方法. 但是这个问题太简单了,所以现在有MM个格子上有障碍,即不能走到这MM个格子上. 简单的转移方程方程: $dp[i][j]=(d[i-1][j]+d[i][j-1])%mod$ 由左和上转移而来. #include<iostream> #include<cstdio> #d…
P1176 路径计数2 题目描述 一个N×N的网格,你一开始在(1, 1),即左上角.每次只能移动到下方相邻的格子或者右方相邻的格子,问到达(N, N),即右下角有多少种方法. 但是这个问题太简单了,所以现在有M个格子上有障碍,即不能走到这M个格子上. 输入输出格式 输入格式: 输入文件第1行包含两个非负整数N,M,表示了网格的边长与障碍数. 接下来M行,每行两个不大于N的正整数x, y.表示坐标(x, y)上有障碍不能通过,且有1≤x, y≤n,且x, y至少有一个大于1,并请注意障碍坐标有可…
[51nod]1776 路径计数 我们先把前两种数给排好,排好之后会有\(a + b + 1\)个空隙可以填数,我们计算有\(k\)个空隙两端都是相同字母的方案数 可以用枚举把第二种数分成几段插进去来算,设这个方案数为\(f[k]\) 然后对于一种有\(k\)个空隙的方案数,枚举剩下的\(a + b + 1 - k\)个空隙填了\(h\)个 然后计算把\(C\)和\(D\)分成\(k + h\)段的方案数就好了,记为\(g[k + h]\) 那么如何计算\(g[i]\)呢 一段要么是偶数,\(C…
一个包含四个点的完全图,可以在任意节点出发,可以在任意节点结束,给出每个点被经过的次数,求有多少种合法的遍历序列.如果两个序列至少有一位是不同的,则认为它们不相同. Input 2 3 3 3 Sample Output 12336 题意:给a个A,b个B,c个C,d个D,求有少种排列,使得相邻的两个不同. 思路:用容斥来做,ans=所有排列-至少一个相邻+至少两个相邻-...+.... 假设有i堆a,则方案数位C(a-1,i-1),则a中至少a-i个相邻:同理: 则i堆a,j堆b,k堆c,l堆…
这套题体验极差. PROBLEM 1001 - 小C的倍数问题 题 OvO http://acm.hdu.edu.cn/showproblem.php?pid=6108 (2017"百度之星"程序设计大赛 - 初赛(A) - 1001) 解 10进制下,各位数和是9的倍数的数能被9整除是因为 10^k-1=能被9整除 实质上就是10-1的因数有9 #include <iostream> #include <cstring> #include <cstdio…
Description 给你n个整数,请按从大到小的顺序输出其中前m大的数. Input 每组测试数据有两行,第一行有两个数n,m(0 < n,m < 1000000),第二行包含n个各不相同,且都处于区间[-500000,500000]的整数. Output 对每组测试数据按从大到小的顺序输出前m大的数. Sample Input 5 3 3 -35 92 213 -644 Sample Output 213 92 3 emm 一开始呢,用快速排序找前m大的数 一提交,超时--淦 后来度娘一…
路径上所有边权的最大公约数定义为一条路径的值. 给定一个有向无环图. T次修改操作,每次修改一条边的边权,每次修改后输出有向无环图上路径的值为1的路径数量(对1,000,000,007取模). Input 第一行两个整数n和m,分别表示有向无环图上的点数和边数.(1<=n<=100,1<=m<=50,000) 第2~m+1行每行三个数x,y,z,表示有一条从x到y权值为z的边.(1<=x,y<=n,1<=z<=100) 第m+2行一个数T,表示修改操作次数(…
序列计数 Time Limit: 4500/4000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 348    Accepted Submission(s): 117 Problem Description 度度熊了解到,1,2,…,n 的排列一共有 n!=n×(n−1)×⋯×1 个.现在度度熊从所有排列中等概率随机选出一个排列 p1,p2,…,pn,你需要对 k=1,2,…
题目链接:hdu 4455 Substrings 题目大意:给出n,然后是n个数a[1] ~ a[n], 然后是q次询问,每次询问给出w, 将数列a[i]分成若干个连续且元素数量为w的集合,计算每个集合中出现的数字种类,输出总和. 解题思路:一开始想到遍历的算法,保持集合元素为w,每次剔除最前一个,加入一个,移动集合,维护数字种类,这种算法的复杂度为o(n^2), 但是超时了,后来看了下题解,dp[i] = dp[i - 1] + sum[i] - cnt; http://blog.csdn.n…
大意:$n$结点$m$条边无向图, 满足 $(1)$经过$m-2$条边$2$次 $(2)$经过其余$2$条边$1$次 的路径为好路径, 求所有好路径数 相当于边加倍后再删除两条边, 求欧拉路条数 首先欧拉路径存在等价于奇数度点不超过2个 所以删除自环边一定成立,若删除两条非自环边, 则两边必须有公共点 特判下不连通输出0即可 #include <iostream> #include <algorithm> #include <cstdio> #define REP(i,…
中位数计数 Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 909    Accepted Submission(s): 346 Problem Description 中位数定义为所有值从小到大排序后排在正中间的那个数,如果值有偶数个,通常取最中间的两个数值的平均数作为中位数. 现在有n个数,每个数都是独一无二的,求出每个数在多少个包…
这题模数是9937还不是素数,求逆元还得手动求. 项链翻转一样的算一种相当于就是一种类型的置换,那么在n长度内,对于每个i其循环节数为(i,n),但是由于n<=2^32,肯定不能直接枚举,所有考虑枚举gcd,对应的n/gcd就是其个数,有点容斥的思想.全部累加最后除以n就计算好染色方案了. 注意这题很卡时间,而且很玄的用long long会错,要先求出上界再枚举,循环中i*i的循环条件会很慢. /** @Date : 2017-09-18 23:33:30 * @FileName: HDU 22…
中位数计数 Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 1301    Accepted Submission(s): 487 Problem Description 中位数定义为所有值从小到大排序后排在正中间的那个数,如果值有偶数个,通常取最中间的两个数值的平均数作为中位数. 现在有n个数,每个数都是独一无二的,求出每个数在多少…
中位数计数 Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 764    Accepted Submission(s): 309 Problem Description 中位数定义为所有值从小到大排序后排在正中间的那个数,如果值有偶数个,通常取最中间的两个数值的平均数作为中位数. 现在有n个数,每个数都是独一无二的,求出每个数在多少个包…
题目简介 题目描述 给你一个N点M边的有向图,求第一个点到第n个点的最短路和最短路条数 题目分析 很明显直接Dijkstra求最短路,加一个最短路计数 如下: if(dis[y]>dis[x]+edge[i].w){ dis[y]=dis[x]+edge[i].w; ans[y]=ans[x]; } else if(dis[y]==dis[x]+edge[i].w) ans[y]+=ans[x]; 记住要删除重边,要不然计数会重复 上代码 #include<bits/stdc++.h>…
题目描述 有一棵n个点的树和两个整数p, q,求满足以下条件的四元组(a, b, c, d)的个数:  1.$1\leq a,b,c,d \leq n$  2.点a到点b的经过的边数为p.  3.点c到点d的经过的边数为q.  4.不存在一个点,它既在点a到点b的路径上,又在点c到点d的路径上. 输入描述 第一行三个整数n,p,q.  接下来n - 1行,每行两个整数u, v,表示树上存在一个连接点u和点v的边. 输出描述 输出一个整数,表示答案.  示例1  输入  5 2 1  1 2  2…
这题真的很恶心,做了一天,最后问学长,才懂题意是什么,原来我一直都没读懂题.这我真的就无语了,你的题意多两句话会死啊?你测试样例多两个例子就不行啊?真蛋疼,题意都不懂,还做个shi? 题里说的是区间,所以必须是连续的,题里又说排好序后的中位数,所以也就相当于当输入1 4 2的时候,应该输出1 1 2, 前两个1能懂,但最后为什么是2呢?因为1个区间是他自己,还有1个区间是1 4 2,这里2是中位数,因为1 4 2排序之后是1 2 4,是中位数,所以1 4 2中的2就是中位数. 理解了这个,看下面…
老题了,附上黄学长链接一发,直接改改就AC了,http://hzwer.com/1216.html #include <cstdio> #include <iostream> #include <cstring> using namespace std; ; ],r[N*],a[N]; int n; int get(int x){ ; memset(sum,,sizeof(sum)); memset(l,,sizeof(l)); memset(r,,sizeof(r))…
题目链接 Problem Description Matt loves letter L. A point set P is (a, b)-L if and only if there exists x, y satisfying: P = {(x, y), (x + 1, y), . . . , (x + a, y), (x, y + 1), . . . , (x, y + b)}(a, b ≥ 1) A point set Q is good if and only if Q is an (…
题目链接 Problem Description 中位数定义为所有值从小到大排序后排在正中间的那个数,如果值有偶数个,通常取最中间的两个数值的平均数作为中位数. 现在有n个数,每个数都是独一无二的,求出每个数在多少个包含其的区间中是中位数. Input 多组测试数据 第一行一个数n(n≤8000) 第二行n个数,0≤每个数≤109, Output N个数,依次表示第i个数在多少包含其的区间中是中位数. Sample Input 5 1 2 3 4 5 Sample Output 1 2 3 2…
思路: 每个槽有4种深度,一共有2^4种状态.然后开4维来保存每一次的状态:dp[ 第几个槽 ][ 当前状态 ][ 末尾深度 ][ 是否符合要求 ]. 代码: #include<cstdio> #include<map> #include<set> #include<queue> #include<cstring> #include<string> #include<cmath> #include<cstdlib&g…