摘要: 求出所有,从2走到x所需的花费在对 t = 2*min(d1,2, d2,3) 模运算下, 所有剩余系的最短路即可(把一个点拆成 t 个点, 每个点代表一种剩余系), 知道了所有剩余系就可以凑出答案。 dis[ 2 ][ 0 ] 到 dis[ 2 ][ t - 1 ] 代表的即为对 t 取模的所有剩 阅读全文
posted @ 2017-08-04 23:52 UnderSilence 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 题目中对二分图的定义十分特殊, 指的是 U,V两部分中,U的顶点度数必定为2,V中顶点无限制。 题目要求的是 对于所有匹配,该匹配的权值=该匹配中选中的边的边权的乘积,求所有匹配权值之和。 对于V中的顶点,a∈V , 如果a的度数为1, 那么a的最优匹配就已经决定了,此时将a对答案的贡献记录下来(a 阅读全文
posted @ 2017-08-04 18:41 UnderSilence 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 对于[l , r]内的每个数,根据唯一分解定理有 所以有 因为 //可根据唯一分解定理推导 所以 题目要求 就可以运用它到上述公式 (注意不能暴力对l,r内的数一个个分解算贡献,而应该枚举l,r区间内质数的倍数): 阅读全文
posted @ 2017-08-03 23:04 UnderSilence 阅读(408) 评论(0) 推荐(0) 编辑
摘要: /*hdu6061[NTT推公式] 2017多校3*/ #include using namespace std; typedef long long LL; const LL MOD = 998244353; const int MAX_N = 1000000; int n, m, temp; LL a; LL inv[1000007]; LL Finv[1000007]; LL F[100... 阅读全文
posted @ 2017-08-02 21:02 UnderSilence 阅读(168) 评论(0) 推荐(0) 编辑
摘要: #include using namespace std; typedef long long LL; int trie[31 * 500005][2]; int no[31 * 500005]; int sz[31 * 500005]; int sum[31][2]; int T, n, temp, tot = 0; LL ans = 0; void solve(int x) { i... 阅读全文
posted @ 2017-08-02 16:36 UnderSilence 阅读(306) 评论(0) 推荐(0) 编辑
摘要: 用一个双向链表来查找比当前元素大的前k-1个元素和后k-1个元素 ,从小到大枚举x,算完x的贡献后将x从链表中删除,优化到O(nk)。 阅读全文
posted @ 2017-08-02 13:44 UnderSilence 阅读(160) 评论(0) 推荐(0) 编辑
摘要: /* hdu6060[贪心+dfs] 2017多校3*/ #include using namespace std; typedef long long LL; int n, k, u, v, c; struct Edge { LL cost; int to; Edge(int C = 0, int T = 0): cost(C), to(T) {} }; vector... 阅读全文
posted @ 2017-08-02 13:39 UnderSilence 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 这道题用单调递增的单调栈维护每个数能够覆盖的最大区间即可。 对于 1 2 3 4 5 4 3 2 1 6 这组样例, 1能够覆盖的最大区间是10,2能够覆盖的最大区间是7,以此类推,我们可以使用单调栈来实现这种操作。 具体看代码: *Code: 每次进来一个比栈顶元素大的元素,就把他压入栈中,并把他 阅读全文
posted @ 2017-07-20 13:54 UnderSilence 阅读(231) 评论(0) 推荐(0) 编辑
摘要: [题目大意] 题目将从某点出发的所有最短路方案中,选择边权和最小的最短路方案,称为最短生成树。 题目要求一颗最短生成树,输出总边权和与选取边的编号。[题意分析] 比如下面的数据: 5 5 1 2 2 2 3 2 3 4 16 1 5 18 4 5 2 1 这个图对于从 1 出发,有两种最短路。 这种 阅读全文
posted @ 2017-07-13 17:05 UnderSilence 阅读(434) 评论(0) 推荐(0) 编辑